【问题标题】:How to add include path to flycheck c/c++-clang?如何添加包含路径到 flycheck c/c++-clang?
【发布时间】:2014-06-07 13:43:42
【问题描述】:

我尝试将包含路径添加到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/"))))

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

#include <foo.h>

flycheck这么说

'foo.h' 文件未找到

我做错了什么?我正在使用来自package.elclang3.4emacs24flycheck.el

【问题讨论】:

    标签: c++ emacs flycheck


    【解决方案1】:

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

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

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

    【讨论】:

    • 有没有办法在每个项目的基础上进行这种配置?
    • @Magnus Emacs 为此提供了目录变量。有关详细信息,请参阅手册。
    • 是的,这当然是一个选项,但它相当有限;只允许变量值,flycheck-clang-include-path 处理相对于被检查文件的真实路径,这意味着更复杂的代码组织难以支持。
    • @Magnus 您可以使用eval 从目录变量中运行任意代码,并且您可以使用绝对路径来避免相对路径出现问题。除此之外,Flycheck 没有特别支持“按项目”设置,而且不会很快支持,因为 Emacs 中没有“项目”的概念。
    • 谢谢,这给了我足够的信息来找到这个:stackoverflow.com/questions/16237506/…
    【解决方案2】:

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

    您有一个项目,其 C++ 源代码位于 ~/myproject
    添加文件~/myproject/.dir-locals.el,内容如下:

    ((nil . ((eval . (setq flycheck-clang-include-path
                           (list (expand-file-name "~/myproject/include/")))))))
    

    这对我有用。

    【讨论】:

    • 另请参阅here 以获取(稍微)更多涉及的示例。
    猜你喜欢
    • 2016-07-04
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多