Linux 在代码::块中的生成前/生成后步骤中,管道重定向失败

Linux 在代码::块中的生成前/生成后步骤中,管道重定向失败,linux,shell,build,codeblocks,Linux,Shell,Build,Codeblocks,我试图在代码::Blocks 16.01(build:Feb2 2016,03:15:41-wx2.8.12(Linux,unicode)-64位中的后期构建步骤(构建选项…/Pre/post-build步骤)上执行以下操作: PYMODULE=“`printf${PROJECT\u NAME}.so | sed's/^lib/\/'`” 但无法在生成日志中显示: s/^lib//''`:1:s/^lib//''''`:语法错误:反引号替换中的EOF 然后我试着 echo libdao

我试图在代码::Blocks 16.01(build:Feb2 2016,03:15:41-wx2.8.12(Linux,unicode)-64位中的后期构建步骤(构建选项…/Pre/post-build步骤)上执行以下操作:

PYMODULE=“`printf${PROJECT\u NAME}.so | sed's/^lib/\/'`”
但无法在生成日志中显示:

s/^lib//''`:1:s/^lib//''''`:语法错误:反引号替换中的EOF

然后我试着

echo libdaoc.so | sed的/^lib/124;
这在终端中工作正常,但在Code::Blocks预构建/后构建步骤中,管道操作失败,显示在构建日志中:

echo libdaoc.so | sed的/^lib/124;
用法:sed[选项]。。。{仅当没有其他脚本时使用脚本}[输入文件]。。。
-n、 安静,安静
抑制图案空间的自动打印
...
如何使其工作?

本质上,我试图从Code::Blocks环境生成构建,然后通过cbp2make导出,因此我需要使用环境变量,而不是硬编码的固定名称。

无需使用sed,任何POSIX shell都可以使用参数替换完成相同的工作:

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

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

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

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

我对cb2make和Code::Blocks有更高的期望。试图制定跨平台解决方案时,他们甚至失去了在单个平台上执行适当构建的能力。

请澄清字符串“lib”是否始终是
${PROJECT\u NAME}
中任何内容的前缀。是的,“lib”是预定义字符串。非常感谢agc,您的解决方案解决了这个问题!我不知道这样的参数扩展!该解决方案适用于外壳。但是,正如它发现的那样,Code::Blocks预构建/后构建面板不支持大多数shell命令,并产生“_libdaoc#lib}”。。。代码::块真是太可惜了。。。