我有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
答案 0 :(得分:1)
如man gcc所述
依赖文件名直接取自“#include”指令而不预先添加路径
实际上gcc无法知道真正的路径。
我建议你修复include语句以保持包含路径与make路径同步,即mod.h
中的白色
#include <module/generator/gen.h>
将Makefile
添加到src
并为gcc添加正确的-I标志,例如
SRCDIR := $(shell pwd)
CXXFLAGS += -I$(SRCDIR)
总是从一些“源根”
开始所有非本地包含是一个好习惯