在Makefile中添加对未编译文件的依赖性

时间:2014-06-04 14:32:40

标签: c++ makefile

我有以下代码生成方案:

  • 原始文件是* .c.macro
  • 由生成* .c文件的特殊程序处理。该程序使用原始.c.macro文件中提到的外部XML文件。沿着这条路走下去:

    macroprocess foo.c.macro -o foo.c

  • 然后* .c文件被编译为* .o通常

我想要做的是使.c文件依赖于XML文件。因此,如果XML发生更改,则在调用'make'命令时会自动重做宏处理。 我可以修改宏处理器的代码,以便生成所有XML的列表并将其写入某处,但我不知道如何将其合并到makefile中。显然我需要在makefile中使用'include'命令,但通常它会用来添加对.h文件等实际代码的依赖。

2 个答案:

答案 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