Skip to content

Instantly share code, notes, and snippets.

@babetoduarte
Forked from zarzen/spacemacs-cpp.md
Created September 9, 2017 23:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save babetoduarte/e01fe5130e9cbf36fbc670b29da2c61b to your computer and use it in GitHub Desktop.
Save babetoduarte/e01fe5130e9cbf36fbc670b29da2c61b to your computer and use it in GitHub Desktop.
C++ development environment setup in Spacemacs

Setup Cpp/C Development Environment in Spacemacs

Based on Eivind Fonn's tutorial [https://www.youtube.com/watch?v=OjbkCEkboA8]

1. Add c/c++ layer

Simply add this (c-c++ :variables c-c++-enable-clang-support t) in dotspacemacs-configuration-layers, like this:

...
dotspacemacs-configuration-layers
'( ...
  (c-c++ :variables c-c++-enable-clang-support t)
  ...
  )
...

Notes

This configuration will enable clang support, so you have to guarantee clang has been installed.

2. Makefile and Source code in the same directory

This is the simplest situation, that you can open any source code file, then type SPC c c for compilation. SPC c C is for specifying compilation command, sometimes need this for enabling debug mode.

3. Makefile in different directory

In this situation we need to specify the location of Makefile. .dir-locals.el file is needed for this purpose. .dir-locals.el should be placed in project root. The file content looks like this:

((c++-mode (helm-make-build-dir . "build/")))

Notes

  1. The path build/ is relative to project root directory.

  2. Emacs will ask if the variable helm-make-build-dir is safe.

    Put the configuration in .spacemacs to prevent this.

    (put 'helm-make-build-dir 'safe-local-variable 'stringp)
    

4. Clang Complete

If the project depends on third party libraries or header files in special locations, clang will not figure out how to analyze source codes and provide auto-complete tips. We need the .clang_complete file to specify the compilation flags. That file can be generated by cc_args.py, which is a tool provided by clang-complete project. Otherwise, The simplest way to install cc_args.py, I think is move the file to /usr/local/bin/.

Usage

The video by Eivind Fonn demonstrates how to use cc_args.py with cmake. [28:00 - 29:40].

CXX="cc_args.py g++" cmake ...#other flags

I find the codes below can work with Makefile and make system directly, but it will invoke the compilation process. And the compilation process always been interrupted by errors, though it can generate the .clang_complete file. This may cause incomplete compilation flags in .clang_complete.

CXX="cc_args.py g++" make all
  1. Turn off Warnings about unused variables

    Add -Wno-unused-parameter to .clang_complete file.

5. Debug

Compile source files with -g flag

So the target executable file will contain debug information.

SPC : -> gdb invoke gdb inside Spacemacs

The GUD interface in Spacemacs has a problem, which cause the current line indicator disappeared.

Rtags for code navigation

https://github.com/lujun9972/emacs-document/blob/master/emacs-common/%E5%9C%A8spacemacs%E4%B8%AD%E4%BD%BF%E7%94%A8rtags.org

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment