c++emacsflycheck

How to add include path to flycheck c/c++-clang?


I tried to add include path to flycheck c/c++-clang, but it didn't work.

I put foo.h in ~/local/include and added the following lines to 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/"))))

And in a file called test.cpp I wrote

#include <foo.h>

flycheck said that

'foo.h' file not found

What am I doing wrong? I'm using emacs24, flycheck.el from package.el and clang3.4.


Solution

  • Use expand-file-name and ~ to refer to paths in your home directory:

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

    Flycheck does not use the system shell to run Clang, nor does it otherwise attempt to expand shell parameters in command lines. Hence, $HOME is passed literally to Clang, which does obviously not work.