# 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