我有一些 .c 和 .h 文件,它们是由基于一个 XML 文件和 optional 另一个 XML 文件的脚本生成的。

从我读过的内容来看,我应该能够使用通配符,例如:

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

当我更改 XXXCompulsory.xml 而不是当我更改 XXXOptional.xml 时,文件 XXXGenerated.c/h 正在重新生成。有人知道为什么吗?

我可以解决重复规则的问题,如下所示:
%Generated.c %Generated.h : %Compulsory.xml
   generation-script $< $*

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

但我会认为有更好的方法来指定 optional 依赖项?

谢谢!

注意:之前已经问过同样的问题(例如 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 $< $*

最佳答案

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

($通配符 *Optional.xml)

关于带有 optional 依赖项的 Makefile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14207735/

10-15 11:18