emacs irony补全c++无法支持头文件,请问大家是怎么解决的

在emacs irony 中对于c++头部无法支持,导致flycheck和company也会失效,主要想支持一个以cmake管理的c++项目,请问大家有什么推荐的解决方法吗?

headers 的补全

;;; backends for irony-c-header
(use-package company-irony-c-headers
  :ensure t
  :defer t
  :init (progn (add-hook 'c-mode-hook
			 (lambda () (add-to-list 'company-backends 'company-irony-c-headers)))
	       (add-hook 'c++-mode-hook
			 (lambda () (add-to-list 'company-backends 'company-irony-c-headers)))
	       ))

irony 集成 cmake

(use-package cmake-ide
  :ensure t
  :defer t
  :init (progn
	  (add-hook 'c++-mode-hook (lambda () (cmake-ide-setup)))
	  (add-hook 'c-mode-hook (lambda () (cmake-ide-setup)))
	  )
  )
(use-package cmake-mode
  :ensure t
  :mode (
	 ("CMakeLists\\.txt\\'" . cmake-mode)
	 ("\\.cmake\\'" . cmake-mode)
	 ))

这是我自己的配置

1 个赞

那请问flycheck有办法吗:grinning:

(use-package flycheck-irony
  :ensure t
  :defer t
  :init (progn
	  (add-hook 'flycheck-mode-hook #'flycheck-irony-setup)
	  ))
(add-hook 'c++-mode-hook (lambda ()
			   (setq flycheck-clang-language-standard "c++11")
			   (setq irony-additional-clang-options '("-std=c++11"))
			   ))

这个对头文件中的内容无法补全的。1520473188_0939_08032018_514x170

但在源文件中可以补全。

要不你试试 cquery, 现在我也切到 cquery了,补全和索引都交给cquery, 而不是现在补全用 irony, 索引用 rtags. 但是奇怪的是,我并不会有你这样的flycheck 和company 的问题

1 个赞

推荐 cquery

1 个赞

好的,谢谢!

感谢,我去试试!

rtags-include-file也很好用

为什么不用 -std=gnu++17-std=gnu++2ac++11会禁用很多功能。

GCC 5默认的是 -std=gnu++14

rtags-include-file什么作用?

因为我当时只需要用到 c++11的,还没有用到 c++14 的特性… cpp 最不缺的就是新特性