我想有条件地包含makefile,具体取决于xml文件和产品的内容
我的xml文件(myxml.xml):
<product1>
<component1 dirname=dir1 />
<component2 dirname=dir2 />
</product1>
<product2>
<component1 dirname=dir1 />
<component3 dirname=dir3 />
</product2>
在dir1中,我有一个config.mk文件,如下所示:
SRC_JS+=dir1/file1.js
SRC_JS+=dir1/file2.js
SRC_HTML+=dir1/file3.html
dir2和dir3相同,它们都是makefile目录的子目录。
现在我希望根据指定的产品包含某些config.mk文件,根据xml文件中的内容 所以我的makefile:
myjscode.js: myxml.xml
read_dirs.py -p $PRODUCT $< > mydirs.txt
while read mydir; do \
include $$mydir/config.mk ; \
done < mydirs.txt;
js-compiler $(addprexis --js ,$SRC_JS) -output $@
可以这样做吗? 仅供参考:我正在使用bash,read_dirs.py脚本输出“每个目录一行”列表。
答案 0 :(得分:0)
首先是简单的部分。 include
指令不能出现在规则中的命令中。修改read_dirs.py
以生成类似的内容(当PRODUCT
=“product2”时):
include dir1/config.mk
include dir3/config.mk
然后在你的makefile中:
mydirs.mk: myxml.xml
read_dirs.py -p $PRODUCT $< > $@
include mydirs.mk
没有必要依赖mydirs.mk
;因为这个makefile includes
,Make会在必要时重建它。
现在困难的部分。我认为您希望选择包含的makefile不仅可以在myxml.xml
更改时更改,还可以在PRODUCT
更改时更改。但是PRODUCT
不是文件,所以我们有一些选择。我们可以有一个包含product.mk
变量的文件PRODUCT
。或者代替mydirs.mk
,我们可以为每个PRODUCT提供不同的文件。或者我们每次都可以强制建造mydirs.mk
。这取决于您设置PRODUCT
的方式以及您的优先级。
答案 1 :(得分:0)
include $(shell read_dirs.py -p $(PRODUCT) myxml.xml|sed s,$$,/config.mk,)
myjscode.js: myxml.xml
js-compiler ...