繁体   English   中英

gcc -MDD与-isystem <include_path> 不会为“系统”路径添加依赖项

[英]gcc -MDD with -isystem<include_path> wont add dependencies for “system” paths

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

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警告-很棒:)

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

因此,看来我可以忽略utils的警告,但不能获得依赖生成的信息,或者我可以获取依赖项输出,但不忽略警告。

我真的想要两个:

  • 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

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

如果还有其他想法,我仍然非常乐于接受...如果有人有更好的想法,我不会在一段时间内标记这个答案...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM