【问题标题】:Pipe redirection fails on pre/post-build steps in the Code::Blocks在 Code::Blocks 中的 pre/post-build 步骤中管道重定向失败
【发布时间】:2018-01-04 04:40:15
【问题描述】:

我正在尝试在 Code::Blocks 16.01 (Build: Feb2 2016, 03:15:41 - wx2) 中的构建后步骤(构建选项.../构建前/构建后步骤)执行以下操作.8.12 (Linux,unicode) - 64 位): PYMODULE="`printf ${PROJECT_NAME}.so | sed 's/^lib/_/'`" 但它未能在 Build log 中显示: s/^lib/_/'`"': 1: s/^lib/_/'`"': Syntax error: EOF in backquote substitution

然后我尝试了 echo libdaoc.so | sed 's/^lib/_/' 这在终端中运行良好,但在 Code::Blocks 构建前/后步骤中,管道操作失败显示在 构建日志 中: echo libdaoc.so | sed 's/^lib/_/' Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]... -n, --quiet, --silent suppress automatic printing of pattern space ... 如何让它发挥作用?
本质上,我正在尝试从 Code::Blocks 环境构建,然后通过 cbp2make 导出,因此我需要使用环境变量而不是硬编码的固定名称。

【问题讨论】:

  • 请澄清字符串“lib”是否已知始终是${PROJECT_NAME} 中任何内容的前缀。
  • 是的,“lib”是一个预定义的字符串。非常感谢,agc,您的解决方案解决了这个问题!我不知道这种参数扩展!
  • 该解决方案适用于外壳。但是当它发现 Code::Blocks pre/post build 面板不支持大多数 shell 命令并产生“_libdaoc#lib}”......这对 Code::Blocks 来说是一种耻辱......

标签: linux shell build codeblocks


【解决方案1】:

不需要sed,任何POSIX shell 都可以使用参数替换来完成同样的工作:

PYMODULE="_${PROJECT_NAME#lib}.so"

以上假设存在前缀“lib”,(OP 似乎暗示它应该存在)。

【讨论】:

    【解决方案2】:

    我最终使用 Code::Blocks script expansion 进行交互式构建和 @agc 为 Makefile 提供的解决方案...基本上,Makefile 在由 cb2make 生成后需要一些后处理:

    • 用标准 shell 命令替换 Code::Blocks 脚本扩展
    • Code::Blocks 中定义的全局变量的规范(不导出手动指定的变量、PROJECT_NAME 等)

    我对 cb2makeCode::Blocks 有更高的期望。尝试制作跨平台解决方案时,他们甚至无法在单个平台上执行足够的构建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2020-07-15
      • 2019-07-30
      • 2022-10-17
      • 1970-01-01
      • 2023-02-01
      相关资源
      最近更新 更多