我正在使用Qt的C++項目。我已經啓用Synthetic來通過我的vimrc檢查標題,其檢查器(gcc,clang_check和clang_tidy)都抱怨我的項目中有同樣的事情:他們無法找到特定的頭文件。關於丟失文件的綜合性抱怨
問題的頭文件是'QtCore/qconfig-64.h'。他們是正確的,這個文件不存在。問題是這個文件不應該加載到項目中,因爲它是一個32位項目。 「QtCore/qconfig.h」的預處理方向告知什麼項目包括:
#if __WORDSIZE == 32
#include "QtCore/qconfig-32.h"
#elif __WORDSIZE == 64
#include "QtCore/qconfig-64.h"
#else
#error "unexpected value for __WORDSIZE macro"
#endif
是否有適當的解決方案,使syntastic識別預處理指令選擇哪些頭文件包括哪些內容?如果不是,那麼可以採取哪些其他解決方法來消除這些錯誤,同時最大限度地減少效用損失?
讀'缺少其它消息:H syntastic-debug'和':h syntastic-cpp-gcc',並嘗試使用合成器運行用於編譯文件的相同命令行。由於Vim和Syntax的工作方式,這可能會讓後面很痛苦,但這是唯一有意義的方法。 –
@SatoKatsura:我會研究下一個我得到的機會的合成調試信息。至於syntastic是否與我的編譯器運行相同的命令,我指示合成使用由插件附帶的cc_args.py腳本生成的.clang_complete文件。我覺得這是 - 如果不是確切的話 - 足以接近相同的命令,以達到最實際的目的。根據我目前的信息,我的最佳猜想是,Syntastic搜索代碼include語句的方式不考慮#if語句,或者不考慮應用於它們的環境變量。 –
Syntastic不關心'#if's或關於你的文件的內容。在這種情況下,運行linters是'gcc','clang-check'和'clang-tidy'(注意:'clang-tidy'不會做任何'clang-check'操作,需要同時運行)。如果你沒有提供所有相關的'-Dfoo = bar'給這些linters,你將會得到無用的錯誤,並且/或者他們會在沒有檢查任何東西的情況下退出。除非你在ESP方面表現出色,否則':h syntastic-debug'就出現在這裏。 –