我正在尝试编译我从Internet下载的大型项目,并且我有一个运行configure,make和make install的自定义脚本.问题是我想传递一些兼容性标志,但项目使用的libtool无法识别LDFLAGS,我必须找到另一种传递兼容性标志的方法.所以在运行configure后我的脚本中我有如下代码:
COMPATFLAG="-gcc-name=/usr/local/gcc-4.2.1/bin/gcc"
sed -i "s/CC -shared/CC -shared ${COMPATFLAG}/g" libtool
Run Code Online (Sandbox Code Playgroud)
${COMPATFLAG}可能会得到不同的值取决于正在编译的平台,所以我不能在sed语句中以明文形式.问题是它不起作用 - 我得到一个空的空间而不是值${COMPATFLAG}.如果我改为写sed -i "s/CC -shared/CC -shared TEST/g" libtool,则将字符串"TEST"添加到文件中.如果我使用单引号,我得到${COMPATFLAG}字符串而不是变量的值.如果我尝试导出${COMPATFLAG}它仍然无法正常工作.我不知道为什么会出错.任何的想法?
既然COMPATFLAG有正斜杠你应该在sed中使用不同的正则表达式分隔符:
sed -i "s#CC -shared#& ${COMPATFLAG}#g" libtool
Run Code Online (Sandbox Code Playgroud)
我也在#这里使用,以避免在替换模式中重复匹配的字符串.
感谢@JonathanLeffler提供此技巧,您甚至可以使用控制字符作为正则表达式分隔符:
sed -i "s^GCC -shared^G& ${COMPATFLAG}^Gg" libtool
Run Code Online (Sandbox Code Playgroud)
键入^G如ctrl-V-G壳