配置 Flycheck 以使用 C++11

Configuring Flycheck to work with C++11

我在为 C++11 配置 flycheck 时遇到了很大的问题。现在,flycheck 正在标记 std::to_string() 之类的东西。我使用的检查器只是 g++。我可以在 .emacs 文件中添加什么,以便 flycheck 默认采用 C++11?

Flycheck 为此提供了选项flycheck-gcc-language-standard。你不应该全局设置它,因为这会破坏对 C 文件的检查,但你可以在初始化文件中使用以下代码从 c++-mode-hook 开始设置它:

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

但是,我不建议这样做。相反,使用 Directory Variables 配置每个项目的语言标准。

使用 C-x d 在 Dired 中打开项目的根目录,然后键入 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。

已经很好的答案了。我只是想补充一点,如果你使用 clang 代替,那么需要修改的变量是 flycheck-clang-language-standard.