2017-08-24 90 views
3

我正在使用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識別預處理指令選擇哪些頭文件包括哪些內容?如果不是,那麼可以採取哪些其他解決方法來消除這些錯誤,同時最大限度地減少效用損失?

+2

讀'缺少其它消息:H syntastic-debug'和':h syntastic-cpp-gcc',並嘗試使用合成器運行用於編譯文件的相同命令行。由於Vim和Syntax的工作方式,這可能會讓後面很痛苦,但這是唯一有意義的方法。 –

+0

@SatoKatsura:我會研究下一個我得到的機會的合成調試信息。至於syntastic是否與我的編譯器運行相同的命令,我指示合成使用由插件附帶的cc_args.py腳本生成的.clang_complete文件。我覺得這是 - 如果不是確切的話 - 足以接近相同的命令,以達到最實際的目的。根據我目前的信息,我的最佳猜想是,Syntastic搜索代碼include語句的方式不考慮#if語句,或者不考慮應用於它們的環境變量。 –

+0

Syntastic不關心'#if's或關於你的文件的內容。在這種情況下,運行linters是'gcc','clang-check'和'clang-tidy'(注意:'clang-tidy'不會做任何'clang-check'操作,需要同時運行)。如果你沒有提供所有相關的'-Dfoo = bar'給這些linters,你將會得到無用的錯誤,並且/或者他們會在沒有檢查任何東西的情況下退出。除非你在ESP方面表現出色,否則':h syntastic-debug'就出現在這裏。 –

回答

-3

:h 'syntastic_quiet_messages',嘗試一下本作你的情況

let g:syntastic_c_gcc_quiet_messages = { 
     \ "regex": ['\mQtCore/qconfig-64\.h'] 
     \} 

注:QtCore/qconfig-64\.h可擴展到完整的錯誤信息,以儘量避免用相同的字符串

+2

沉默編譯器關於丟失的包含文件可能是解決這個問題的最糟糕的方法。除此之外,'gcc'將跳過任何進一步的錯誤。 –

+0

這是一個潛在的問題。正則表達式可以擴展來試圖避免這種情況。 – leaf

+1

缺少頭文件是'gcc'的致命錯誤,之後它將停止運行。 'g:syntastic_c_gcc_quiet_messages'完成了它所說的任務,它使一些消息靜音。它不會說服'gcc'在檢測到缺少標題後重新開始解析。 –