GCC 为正确目录中生成的 header 文件创建依赖项

GCC creating dependencies for generated header files in proper directory

我使用 GCC 创建依赖文件,来自 header 个存储在 某个目录。这是我的食谱:

gcc -MM -MG -MT obj/$*.o -MP -MF dep/$*.Td -I include $<

其中一个 header 文件已生成(使用 Bison 3.0.5),因此它可能不会 存在。因此,我使用如上所示的 -MG 选项,但它会生成 没有目录的依赖项。我如何调整 make 或 GCC 以 将包含目录添加到生成的 header?

提前致谢

多多

通常情况下,搜索路径有很多条目,如果头文件不存在,则不清楚选择哪个前缀。

cook 构建工具附带一个程序 c_incl,它会扫描 C 源文件中的 #include 指令,并且可以按照您想要的方式运行,使用命令如 c_incl -No_Cache -Absent_System_Mention -Iinclude -C。但是这个工具相当晦涩。

最好改用稍微不那么晦涩的 GNU make 功能:如 Types of Prerequisites 中所述的仅顺序先决条件。您可以将生成的头文件(或其他 Bison 输出文件)列为编译 C 文件的所有规则的仅顺序先决条件,以便它们在第一次构建时及早生成,但之后不会不必要地触发重建。使用这种方法,您不需要为尚不存在的文件生成依赖项。