我有一个main.cpp文件,要为其生成依赖文件main.d(包含在Makefile中)。

我正在呼叫g++ -MM -MF src/main.d -MP -MT src/main.o src/main.cpp。除非我有一些源生成器,否则它工作正常。我为此找到了-MG标志,但是它无法正常运行。

例如:main.cpp包括module/mod.h#include "module/mod.h"),而mod.h包括generator/gen.h#include "generator/gen.h"),则生成gen.h。有以下结构:

-Makefile
-src
--main.cpp
--module
---mod.h
---generator
----gen.h


Makefile中,我有一个生成src/module/generator/gen.h的规则。

g++依赖关系生成的现有文件是正确的:

src/main.o: src/module/mod.h


但是对于不存在的文件,gen.h依赖关系只是generator/gen.h

如果我在生成依赖项之前生成此文件,则它是正确的src/module/generator/gen.h

g++是否还有其他选项可以为不存在的文件正确生成依赖关系?

main.d不存在时生成的gen.h

src/main.o: src/module/mod.h generator/gen.h


存在main.d时生成的正确gen.h

src/main.o: src/module/mod.h src/module/generator/gen.h

最佳答案

如man gcc中所述


  依赖文件名直接从“ #include”指令中获取,无需添加路径


实际上,gcc没有办法知道真实的路径。
我建议您修复include语句,以使include路径与make路径保持同步,即mod.h中的白色

#include <module/generator/gen.h>


Makefile放入src并在gcc中添加适当的-I标志,例如

SRCDIR := $(shell pwd)
CXXFLAGS += -I$(SRCDIR)


始终从某个“源根目录”开始所有非本地包含项是一个好习惯

07-26 09:35
查看更多