Table of Contents

# Setup Cpp/C Development Environment in Spacemacs Based on Eivind Fonn's tutorial [] ## 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