2015-06-20 70 views
17

我在爲C++ 11配置flycheck時遇到了很大的麻煩。現在,flycheck正在標記諸如std::to_string()之類的內容。我使用的檢查器只是g ++。我可以在.emacs文件中添加什麼,以便flycheck默認使用C++ 11?將Flycheck配置爲使用C++ 11

回答

37

Flycheck爲此提供了選項flycheck-gcc-language-standard。你不應該把它在全球範圍,因爲這將打破C文件檢查,但你可以從c++-mode-hook在你的init文件下面的代碼設置:

(add-hook 'c++-mode-hook (lambda() (setq flycheck-gcc-language-standard "c++11"))) 

不過,我會建議反對這一點。相反,使用Directory Variables來配置每個項目的語言標準。

在Dired中打開項目的根目錄C-x d,然後鍵入M-x add-dir-local-variable RET c++-mode RET flycheck-gcc-language-standard RET "c++11"。這將在您的項目的根目錄中創建一個.dir-locals.el文件。每當您從該目錄或任何子目錄訪問文件時,Emacs都會讀取此文件,並根據此文件中的規則設置變量。具體來說,Emacs現在將爲您的項目中的所有C++文件設置Flycheck語法檢查的語言標準爲C++ 11。

+0

我試過用目錄變量和C++緩衝區中的變量顯示爲* C++ 11 *。但我仍然警告,* auto型說明符是C++ 11擴展名*。 –

+0

@Enzo Chi,適用於我,可能需要刪除文件緩衝區並重新打開文件。 –

+4

以防萬一它不適用於某些人:似乎flycheck會在gcc之前使用clang,前提是安裝前。在這種情況下,變量是flycheck-clang-language-standard。 – dmg

4

已經很好的答案了。我只想補充一點,如果您使用clang代替,那麼需要修改的變量是flycheck-clang-language-standard

+1

或在位於項目根目錄的.clang_complete文件中添加一行「-std = C++ 11」。 – elinx