我有一个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)
始终从某个“源根目录”开始所有非本地包含项是一个好习惯