spacemacs/layers/+tools/cmake/README.org

84 lines
3.4 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+TITLE: CMake layer
[[file:img/cmake.png]]
* Table of Contents :TOC_4_gh:noexport:
- [[#description][Description]]
- [[#features][Features:]]
- [[#install][Install]]
- [[#layer][Layer]]
- [[#cmake-ide-configuration][CMake-ide configuration]]
- [[#key-bindings][Key bindings]]
* Description
This layer adds support [[https://cmake.org/][CMake]] scripts.
** Features:
- Support for CMake configure/build (with limited support for other build systems),
automatic generation of =compile_commands.json= (compile flags), on-the-fly configuration
of flycheck, company-clang and RTags (if installed) with [[https://github.com/atilaneves/cmake-ide][cmake-ide]].
- Run selected test using =Helm= interface via =helm-ctest=.
* Install
** Layer
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =cmake= to the existing =dotspacemacs-configuration-layers= list in this
file.
** CMake-ide configuration
To enable CMake projects support set the layer variable =cmake-enable-cmake-ide-support=
to =t= in the dotfile:
#+BEGIN_SRC emacs-lisp
(setq-default dotspacemacs-configuration-layers
'((cmake :variables cmake-enable-cmake-ide-support t)))
#+END_SRC
=cmake-ide= plugin has several useful configuration options.
To configure project you need to create =.dir-locals.el= file. In case of using
make as CMake backend you can use =helm-make= to select required build target.
Here is a sample configuration. This configuration forces =cmake-ide= to use the
local directory and pass that directory to =helm-make=. Such config allows to
build your project with ~SPC c c~ key binding.
Additionally its possible to configure =helm-ctest= in the same way via defining ~helm-ctest-dir~.
Trailing slash is required.
#+BEGIN_SRC emacs-lisp
((nil .
((cmake-ide-project-dir . "~/Project")
(cmake-ide-build-dir . "~/Project/build")
(cmake-ide-cmake-opts . "-DCMAKE_BUILD_TYPE=Debug")
(helm-make-build-dir . "build")
(helm-make-arguments . "-j7")
(helm-ctest-dir . "~/Project/build/")
)))
#+END_SRC
In case of projectile its possible to configure project like:
#+BEGIN_SRC emacs-lisp
((nil . ((eval . (setq
projectile-project-test-cmd #'helm-ctest
projectile-project-compilation-cmd #'helm-make-projectile
projectile-project-compilation-dir "build"
helm-make-build-dir (projectile-compilation-dir)
helm-ctest-dir (projectile-compilation-dir)
))
(projectile-project-name . "My Cool Project")
(projectile-project-run-cmd . "./run.sh")
(projectile-project-configure-cmd . "cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..")
(helm-make-arguments . "-j7"))))
#+END_SRC
* Key bindings
| Key binding | Description |
|-------------+-------------------------------------------------------------------------|
| ~SPC m p c~ | Run CMake and set compiler flags for auto-completion and flycheck |
| ~SPC m p C~ | Run CMake if compilation database JSON file is not found |
| ~SPC m p d~ | Remove file connected to current buffer and kill buffer, then run CMake |
| ~SPC m p t~ | Run CTest |