所以我有以下设置(简化版):
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
中包含特定文件,但不能包含文件夹,并且我没有文件列表:(答案 0 :(得分:0)
我刚刚发现了一些可行的方法,但是我不确定它的效率如何。我发现-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
这将意味着预处理器运行两次-不确定该执行多少工作...但是与编译阶段相比,它似乎运行得很快。
如果还有其他想法,我仍然非常乐于接受...如果有人有更好的想法,我将暂时不回答这个答案...