[英]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.