簡體   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