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

3.4 KiB

CMake layer

/TakeV/spacemacs/media/commit/c7c348a6769a8b36fbaf846a4d5542dd3c4af7f5/layers/+tools/cmake/img/cmake.png

Description

This layer adds support 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 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:

  (setq-default dotspacemacs-configuration-layers
    '((cmake :variables cmake-enable-cmake-ide-support t)))

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 it's possible to configure helm-ctest in the same way via defining helm-ctest-dir. Trailing slash is required.

  ((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/")
         )))

In case of projectile it's possible to configure project like:

  ((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"))))

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