[英]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的警告,但不能获得依赖生成的信息,或者我可以获取依赖项输出,但不忽略警告。
我真的想要两个:
是否有可能以某种方式获得两种行为?
我的一些想法:
-include
包含特定文件,但不能包含文件夹,并且我没有文件列表:( 我刚刚发现了可行的方法,但不确定其效率如何。 我发现-E gcc选项仅将-c(编译)替换为预处理)。 所以我可以做:
生成依赖项信息:
g++ -I application -I application/utils -E application/app1.cpp -o /dev/null -MMD -MP -MF dep.d
用最少的警告编译文件:
g++ -Wall -Wextra -Werror -I application -isystem application/utils -c application/app1.cpp -o obj.o
这将意味着预处理器运行两次-不确定该执行多少工作...但是与编译阶段相比,它似乎运行得很快。
如果还有其他想法,我仍然非常乐于接受...如果有人有更好的想法,我不会在一段时间内标记这个答案...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.