<div id="table-of-contents"> <h2>Table of Contents</h2> <div id="text-table-of-contents"> <ul> <li><a href="#orgheadline16">1. Setup Cpp/C Development Environment in Spacemacs</a> <ul> <li><a href="#orgheadline2">1.1. 1. Add c/c++ layer</a> <ul> <li><a href="#orgheadline1">1.1.1. Notes</a></li> </ul> </li> <li><a href="#orgheadline3">1.2. 2. Makefile and Source code in the same directory</a></li> <li><a href="#orgheadline7">1.3. 3. Makefile in different directory</a> <ul> <li><a href="#orgheadline6">1.3.1. Notes</a></li> </ul> </li> <li><a href="#orgheadline10">1.4. 4. Clang Complete</a> <ul> <li><a href="#orgheadline9">1.4.1. Usage</a></li> </ul> </li> <li><a href="#orgheadline13">1.5. 5. Debug</a> <ul> <li><a href="#orgheadline11">1.5.1. Compile source files with <code>-g</code> flag</a></li> <li><a href="#orgheadline12">1.5.2. <code>SPC :</code> -> <code>gdb</code> invoke gdb inside Spacemacs</a></li> </ul> </li> <li><a href="#orgheadline15">1.6. Todo</a> <ul> <li><a href="#orgheadline14">1.6.1. Try <code>rtags</code> for better code navigation.</a></li> </ul> </li> </ul> </li> </ul> </div> </div> # Setup Cpp/C Development Environment in Spacemacs<a id="orgheadline16"></a> Based on Eivind Fonn's tutorial [<https://www.youtube.com/watch?v=OjbkCEkboA8>] ## 1. Add c/c++ layer<a id="orgheadline2"></a> 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<a id="orgheadline1"></a> This configuration will enable `clang` support, so you have to guarantee `clang` has been installed. ## 2. Makefile and Source code in the same directory<a id="orgheadline3"></a> 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<a id="orgheadline7"></a> 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<a id="orgheadline6"></a> 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<a id="orgheadline10"></a> 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<a id="orgheadline9"></a> 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<a id="orgheadline13"></a> ### Compile source files with `-g` flag<a id="orgheadline11"></a> So the target executable file will contain debug information. ### `SPC :` -> `gdb` invoke gdb inside Spacemacs<a id="orgheadline12"></a> 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