gpt4 book ai didi

c++ - gcc -MDD with -isystem 不会为 "system"路径添加依赖项

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:29 24 4
gpt4 key购买 nike

所以我有以下设置(简化版):

application/app1.hpp
application/app1.cpp
application/utils/utils1.hpp
application/utils/utils1.cpp

因此,当我编译 app1.cpp 时,我会这样做(这是编译的简化版本):

g++ -Wall -Wextra -Werror -I application -isystem application/utils -MMD -MP -MF dep.d -c application/app1.cpp -o obj.o

我在哪里使用 -MDD 来自动生成依赖信息。我使用 -isystem 来禁止来自 utils 文件夹中的文件的警告。

注意:utils 是一个子模块(即独立编译的独立项目)。因此我不想编译该项目的警告/错误。因此我使用 -isystem application/utils 来包含文件夹。当您使用 isystem 时,您不会收到 gcc 警告 - 这很棒 :)

但是我刚刚发现这也是我没有得到完整依赖输出的原因。 isystem 目录中包含的文件不会作为依赖项添加到 gcc 生成的 dep.d 文件中。

所以看来我可以忽略来自 utils 的警告但不为其生成依赖项或者我可以获得依赖项输出但不忽略警告。

两个我都想要:

  • 没有来自实用程序的警告
  • 来自 utils 文件夹的依赖项(通过 gcc 的 -MMD)

是否有可能以某种方式获得这两种行为?

我的一些想法:

  • 我正在考虑以某种方式先独立运行依赖预处理器部分,然后再编译...但我没有找到这样做的方法
  • 强制在 MMD 部分包含文件夹。我发现我可以使用 -include 包含特定文件,但不能包含文件夹,而且我没有文件列表 :(

最佳答案

我刚刚找到了一些可行的方法,但我不确定它的效率如何。我找到了 -E gcc 选项,它仅用预处理替换了 -c(编译))。所以我可以这样做:

  1. 生成依赖信息:

    g++ -I application -I application/utils -E application/app1.cpp -o/dev/null -MMD -MP -MF dep.d

  2. 用最少的警告编译文件:

    g++ -Wall -Wextra -Werror -I application -isystem application/utils -c application/app1.cpp -o obj.o

这将意味着预处理器运行两次 - 不确定有多少工作......但与编译阶段相比它似乎运行得相当快。

如果有进一步的想法,我仍然对他们非常开放......我暂时不会标记这个答案,以防有人有更好的想法......

关于c++ - gcc -MDD with -isystem<include_path> 不会为 "system"路径添加依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54201978/

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