Table of Contents

CMake layer

Table of ContentsClose


1 Description

This layer adds support CMake scripts.

1.1 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.

2 Install

2.1 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.

2.2 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 . "./")
         (projectile-project-configure-cmd . "cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..")
         (helm-make-arguments . "-j7"))))

3 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

Author: root

Created: 2019-11-10 Sun 14:17