sed在一个简单的Makefile配方中失败

时间:2015-12-22 13:08:37

标签: sed makefile

我写了一个简单的test.pc文件,如下所示:

includedir=/usr/include
includearchdir=/usr/include

我想要的只是用 $ {prefix} 替换 / usr ,这样它就会变成如下所示:

includedir=${prefix}/include
includearchdir=${prefix}/include

所以,我编写了一个简单的Makefile来处理test.pc文件,如下所示:

all:
        sed -e 's|=/usr|=$\{prefix\}|g' test.pc

当我执行make时,它会处理test.pc,并在 $ {prefix} 中缺少'$'时显示如下答案:

includedir={prefix}/include
includearchdir={prefix}/include

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

由于您在Makefile中,您需要转义美元符号$

sed -e 's|=/usr|=$$\{prefix\}|g'

让make不理解引用,所以你甚至需要在引用的字符串中转义字符。

答案 1 :(得分:0)

我解决了这个问题。事实证明,我需要使用$$$$\{prefix\}而不是$\{prefix\}来替换生产Makefile文件中的现有/usr。我不知道为什么,但它确实有效。所以,我完整添加的修补程序如下所示。谢谢所有帮助过的人,我很感激。

$(STAGING_DIR_HOST)/bin/sed -i 's|prefix=\(.*\)|prefix=$(STAGING_DIR)/usr|g;s|includearchdir=/usr|includearchdir=$$$$\{prefix\}|g' $(1)/usr/lib/pkgconfig/*.pc