带有可选依赖项的Makefile

时间:2013-01-08 03:21:45

标签: makefile dependencies optional

我有一些基于一个XML文件和另一个XML文件的脚本生成的.c和.h文件。

根据我的阅读,我应该可以使用通配符,例如:

%Generated.c %Generated.h : %Compulsory.xml $(wildcard %Optional.xml)
   generation-script $< $*

当我更改XXXCompulsory.xml时,正在重新生成文件XXXGenerated.c / h,但在更改XXXOptional.xml时则不会。有谁知道为什么?

我可以解决重复规则的问题,如下所示:

%Generated.c %Generated.h : %Compulsory.xml
   generation-script $< $*

%Generated.c %Generated.h : %Compulsory.xml %Optional.xml
   generation-script $< $*

但我认为有更好的方法来指定可选的依赖项吗?

谢谢!

注意:之前已经问过同样的问题(例如How to manage C header file dependencies?)但是在这种情况下我不能让编译器生成.d文件。

修改 Optional.xml的位置很好,因为如果我只指定规则它可以工作:

%Generated.c %Generated.h : %Compulsory.xml %Optional.xml
   generation-script $< $*

并尝试仅针对Optional.xml存在的目标进行编译。

但我注意到这不适用于括号:

%Generated.c %Generated.h : %Compulsory.xml $(%Optional.xml)
   generation-script $< $*

1 个答案:

答案 0 :(得分:0)

使用函数通配符时,通配符是*,而不是%

($ wildcard * Optional.xml)