1


我想根据 xml 文件和产品的内容有条件地包含 makefile。
我的 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 目录的子目录。

现在我想根据 xml 文件中的内容,根据指定的产品包含某些 config.mk 文件。
所以我的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 脚本输出一个“每个目录一行”列表。

4

2 回答 2

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以及您的优先级是什么。

于 2013-01-09T15:54:19.660 回答
0
include $(shell read_dirs.py -p $(PRODUCT) myxml.xml|sed s,$$,/config.mk,)
myjscode.js: myxml.xml
    js-compiler ...
于 2013-11-18T13:41:42.490 回答