gpt4 book ai didi

c++ - g++ -MG 标志的意外行为

转载 作者:行者123 更新时间:2023-11-28 06:40:38 25 4
gpt4 key购买 nike

我有 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.dgen.h不存在时生成:

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

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

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

最佳答案

如 man gcc 中所述

The dependency filename is taken directly from the "#include" directive without prepending path

实际上,gcc 无法知道真实路径。我建议您修复 include 语句以使包含路径与 make 路径保持同步,即 mod.h

中的白色
#include <module/generator/gen.h>

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

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

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

关于c++ - g++ -MG 标志的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26045315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com