从另一个makefile

时间:2016-06-29 01:19:20

标签: c++ linux makefile

我想将这个字符串替换为我的主要Makefile包含的.mak文件中的一个字符串,如下所示:

/boo.mak

[...]

LOADLIBES += -lGoo
LOADLIBES += -lBaa -lCov -lDtt  // -lDtt to be replaced

[...]

/生成文件

[...]

include $(DIR)/boo.mak

[...]

-lDtt将替换为-Wl, --do-something -lDtt -Wl --undo-something

你会怎么建议这样做? 我试过这个:

/测试

[...]
replace:= -Wl, --do-something -lDtt -Wl --undo-something
dtt:= -lDtt
boo:= $(DIR)/boo.mak

newboo:= $(subst $(dtt),$(replace),$(boo))

include $(newboo)
[...]

但是没有改变,-lDtt仍然存在,并且在我跑完之后不会替换我想要的文本。

编辑:我正在使用gcc和linux。

2 个答案:

答案 0 :(得分:1)

$(subst的第三个参数是要替换的实际字符串。它不是找到字符串的文件的名称,正如您似乎相信的那样。

示例:

$ cat Makefile
replace:= -Wl, --do-something -lDtt -Wl --undo-something
dtt:= -lDtt
boo:= This string contains -lDtt which will be replaced

newboo:= $(subst $(dtt),$(replace),$(boo))

testme:
    echo $(newboo)
$ make testme
echo This string contains -Wl, --do-something -lDtt -Wl --undo-something which will be replaced
This string contains -Wl, --do-something -lDtt -Wl --undo-something which will be replaced

因此,在您的情况下,您需要使用$(subst变量上的LOADLIBES来替换其内容。

答案 1 :(得分:0)

好的,感谢上面的回答。我设法弄清楚出了什么问题以及我应该采取的后续步骤来使事情顺利进行。这是我当前的Makefile:

[...]

include $(DIR)/boo.mak

replace:= -Wl, --do-something -lDtt -Wl --undo-something
dtt:= -lDtt
boo:= $(subst $(dtt),$(replace),$(LOADLIBES))

LOADLIBES = $(boo) //replace old LOADLIBES variable with new modified lib

[...]

我愿意接受任何使这更好的建议但现在工作正常。