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

makefile dir のすべてのサブディレクトリである dir2 と dir3 についても同じです。

指定された製品に応じて、xml ファイルの内容に応じて特定の config.mk ファイルが含まれるようになりました。
だから私のメイクファイル:

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 スクリプトは「ディレクトリごとに 1 行」のリストを出力します。

4

2 に答える 2

0

まず簡単な部分。ディレクティブをルールのコマンドに含めることはincludeできません。read_dirs.py次のようなものを生成するように変更します(= "product2"の場合)PRODUCT

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製品ごとに異なるファイルを作成することもできます。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 に答える