我有以下代码生成方案:
由生成* .c文件的特殊程序处理。该程序使用原始.c.macro文件中提到的外部XML文件。沿着这条路走下去:
macroprocess foo.c.macro -o foo.c
然后* .c文件被编译为* .o通常
我想要做的是使.c文件依赖于XML文件。因此,如果XML发生更改,则在调用'make'命令时会自动重做宏处理。 我可以修改宏处理器的代码,以便生成所有XML的列表并将其写入某处,但我不知道如何将其合并到makefile中。显然我需要在makefile中使用'include'命令,但通常它会用来添加对.h文件等实际代码的依赖。
答案 0 :(得分:1)
如果你可以让你的macroprocess为每个* .c.macro文件写一个依赖文件(例如* .xmldep),你可以这样做:
-include $(C_MACRO:.c.macro=.xmldep)
其中$(C_MACRO)是包含* .c.macro文件的变量。
前面的-
将确保第一次,当make无法找到依赖项文件时,make不会失败。
答案 1 :(得分:1)
您可以将foo.xml
添加为foo.c
的依赖项,并使用filter
命令仅将%.c.macro
文件作为macroprocess
的参数。
这样的事情:
# Basic targets
all: foo
foo: foo.o
gcc -o $@ $^
foo.o: foo.c
gcc -o $@ -c $<
# Special target with filter
foo.c: foo.c.macro
macroprocess -o $@ $(filter %.c.macro,@^)
# Adding foo.xml as a dependency of foo.c
foo.c: foo.xml
.PHONY: all foo