如何添加包含路径到flycheck c/c ++ - clang?

use*_*819 9 c++ emacs flycheck

我试图将包含路径添加到flycheckc/c ++ - clang,但它没有用.

foo.h输入~/local/include并添加以下行init.el:

(add-hook 'c++-mode-hook
          (lambda () (setq flycheck-clang-standard-library "libc++")))
(add-hook 'c++-mode-hook
          (lambda () (setq flycheck-clang-language-standard "c++1y")))
(add-hook 'c++-mode-hook
          (lambda () (setq flycheck-clang-include-path
                           (list "$HOME/local/include/"))))
Run Code Online (Sandbox Code Playgroud)

并在一个名为test.cpp我写的文件中

#include <foo.h>
Run Code Online (Sandbox Code Playgroud)

flycheck

找不到'foo.h'文件

我究竟做错了什么?我正在使用emacs24,flycheck.elpackage.elclang3.4.

lun*_*orn 10

使用expand-file-name~引用主目录中的路径:

(add-hook 'c++-mode-hook
          (lambda () (setq flycheck-clang-include-path
                           (list (expand-file-name "~/local/include/")))))
Run Code Online (Sandbox Code Playgroud)

Flycheck不使用系统shell来运行Clang,也不会尝试在命令行中扩展shell参数.因此,$HOME字面上传递给Clang,这显然不起作用.


nep*_*tom 8

我不想通过这个答案获得荣誉,但它可能对某人有用。
使用接受的答案和评论来设置带有目录变量的flycheck变量

您有一个包含 C++ 源代码的项目~/myproject
添加~/myproject/.dir-locals.el具有以下内容的文件:

((nil . ((eval . (setq flycheck-clang-include-path
                       (list (expand-file-name "~/myproject/include/")))))))
Run Code Online (Sandbox Code Playgroud)

那对我有用。