*cmake.txt* Vim/Neovim plugin for working with CMake projects *cmake* *vim-cmake* Maintainer: Carlo Delle Donne Version: 0.7.1 ============================================================================== CONTENTS *cmake-contents* 1. Intro .............................................. |cmake-intro| 2. Usage .............................................. |cmake-usage| 3. Commands ........................................... |cmake-commands| 3.1 Generating a project build system .............. |cmake-generate| 3.2 Building and installing a project .............. |cmake-build| 3.3 Switch between build configurations............. |cmake-switch| 3.4 Opening and closing the CMake console .......... |cmake-console| 3.5 Stopping the running command ................... |cmake-stop| 4. Mappings ........................................... |cmake-mappings| 4.1 Global mappings ......................... |cmake-plug-mappings| 4.2 CMake console window key mappings .............. |cmake-key-mappings| 5. Events ............................................. |cmake-events| 6. Quickfix list ...................................... |cmake-quickfix| 7. Configuration ...................................... |cmake-configuration| 8. Contributing ....................................... |cmake-contributing| 9. License ............................................ |cmake-license| ============================================================================== INTRO *cmake-intro* Vim-CMake is a plugin for building CMake projects inside of Vim/Neovim, with a nice visual feedback. Features~ - Visual experience, shows CMake output in a console-like window - Slick management of build configurations - Autocompletion for build targets and build configurations - Quickfix list population after each build - Airline/statusline status information, including current build configuration - Plug-and-play, but configurable - Written in Vimscript Requirements~ - Vim with `+terminal`, or Neovim >= 0.5 - Under Windows, only Neovim is supported at the moment ============================================================================== USAGE *cmake-usage* Run |:CMakeGenerate| from the top-level CMake source directory to generate a build system for the project. Then, run |:CMakeBuild| to build the project. The built files will end up in the binary directory (out-of-source build). To switch between build configurations, run |:CMakeSwitch| {config}. With Vim-CMake, you can easily manage build configurations (Debug, Release, etc.), build specific targets and control build options, and fix errors using Vim's |quickfix| feature. Read on for a detailed explanation of commands, mappings and configuration options. ============================================================================== COMMANDS *cmake-commands* Vim-CMake defines a small set of CMake-related commands. ------------------------------------------------------------------------------ *cmake-generate* Generating a project build system~ *:CMakeGenerate* :CMakeGenerate[!] [config] [opts] Generate project build system for a CMake project. If [!] is supplied, the existing build system is removed before generating a new one. [config] specifies the build configuration to generate. [opts] are passed directly to CMake. By default, the build system is generated for the build configuration specified by `g:cmake_default_config` (see |cmake-configuration|). For instance, if the default build configuration is "Debug", `cmake` will be passed `-D CMAKE_BUILD_TYPE=Debug`, and the build system will be generated in `Debug/`, relative to `g:cmake_build_dir_location` (see |cmake-configuration|). That will result in the following `cmake` command: > cmake -D CMAKE_BUILD_TYPE=Debug [...] \ -S -B /Debug < To generate a build system for another configuration, e.g., "Release", run > :CMakeGenerate Release [...] < which will result in the following `cmake` command: > cmake -D CMAKE_BUILD_TYPE=Release [...] \ -S -B /Release < To generate a build system for a configuration, while passing a different `CMAKE_BUILD_TYPE` to `cmake`, run > :CMakeGenerate SomeConfigName -D CMAKE_BUILD_TYPE=Release [...] < which will result in the following `cmake` command: > cmake -D CMAKE_BUILD_TYPE=Release [...] \ -S -B /SomeConfigName < Use |:CMakeSwitch| to switch between build configurations. *:CMakeClean* :CMakeClean Remove project build system relative to the current build configuration. ------------------------------------------------------------------------------ *cmake-build* Building and installing a project~ *:CMakeBuild* :CMakeBuild[!] [opts] [target] [-- [nativeopts]] Build a project using the generated build system from the current build configuration, and populate a quickfix list (see |cmake-quickfix|). If [!] is supplied, the existing build files are cleaned (using CMake's `--clean-first` option) before building the project. [opts] are passed directly to CMake. [target] is the target to build instead of the default target. [nativeopts] are passed directly to the native tool. For instance, to build the target `mytarget` using a maximum of 4 processes and passing the `VERBOSE=1` option to the native tool, run > :CMakeBuild --parallel 4 mytarget -- VERBOSE=1 < Vim-CMake provides autocompletion for build targets. Just press at any point after `:CMakeBuild` in the command line to trigger autocompletion, e.g. > :CMakeBuild --parallel 4 < *:CMakeInstall* :CMakeInstall Install a project from the current build configuration. ------------------------------------------------------------------------------ *cmake-switch* Switching between build configurations~ *:CMakeSwitch* :CMakeSwitch {config} Switch to build configuration {config}. The build configuration must exist, that is, there has to be a project build system (for instance generated with |:CMakeGenerate|) in the directory {config}. For instance, to switch to an existing configuration called "Release", run > :CMakeSwitch Release < The default build configuration on start-up is specified by `g:cmake_default_config` (see |cmake-configuration|). Use |:CMakeGenerate| to generate a build configuration. Vim-CMake provides autocompletion for existing build configurations. Press after `:CMakeSwitch` in the command line to trigger autocompletion. ------------------------------------------------------------------------------ *cmake-console* Opening and closing the CMake console~ *:CMakeOpen* :CMakeOpen Open the CMake console window. *:CMakeClose* :CMakeClose Close the CMake console window. ------------------------------------------------------------------------------ *cmake-stop* Stopping the running command~ *:CMakeStop* :CMakeStop Stop the command that is currently running in the Vim-CMake console. Stopping a command does not trigger the associated events (see |cmake-events|). ============================================================================== MAPPINGS *cmake-mappings* In addition to commands, Vim-CMake defines some global mappings and some key mappings specific to the CMake console window. ------------------------------------------------------------------------------ *cmake-plug-mappings* Global mappings~ (CMakeGenerate) Equivalent to `:CMakeGenerate`. (CMakeClean) Equivalent to `:CMakeClean`. (CMakeBuild) Equivalent to `:CMakeBuild`. (CMakeBuildTarget) Inserts `:CMakeBuild` in the command line, and leaves the cursor there. (CMakeInstall) Equivalent to `:CMakeInstall`. (CMakeSwitch) Inserts `:CMakeSwitch` in the command line, and leaves the cursor there. (CMakeOpen) Equivalent to `:CMakeOpen`. (CMakeClose) Equivalent to `:CMakeClose`. (CMakeStop) Equivalent to `:CMakeStop`. Example usage of the mappings: > nmap cg (CMakeGenerate) nmap cb (CMakeBuild) nmap ci (CMakeInstall) nmap cs (CMakeSwitch) nmap cq (CMakeClose) < ------------------------------------------------------------------------------ *cmake-key-mappings* CMake console window key mappings~ cg Run `:CMakeGenerate`. cb Run `:CMakeBuild`. ci Run `:CMakeInstall`. cq Close the CMake console window. Stop the running command. ============================================================================== EVENTS *cmake-events* To customize the behaviour after a `:CMakeBuild` command has finished, Vim-CMake defines some user events. `CMakeBuildFailed` Triggered after a build has failed `CMakeBuildSucceeded` Triggered after a build has succeeded Example usage of `CMakeBuildFailed` to jump to the first error > let g:cmake_jump_on_error = 0 " We do not want to focus the console augroup vim-cmake-group autocmd User CMakeBuildFailed :cfirst augroup END < Example usage of `CMakeBuildSucceeded` to close the Vim-CMake console > augroup vim-cmake-group autocmd! User CMakeBuildSucceeded CMakeClose augroup END < ============================================================================== QUICKFIX LIST *cmake-quickfix* After each build (e.g. run with |:CMakeBuild|), Vim-CMake populates a quickfix list to speedup the edit-compile-run cycle, similarly to when running |:make| in Vim/Neovim. Upon an unsuccessful build, just use the standard quickfix commands to open the list of errors (e.g. |:copen|) and jump between errors (e.g. |:cfirst|, |:cnext|). Build errors are parsed using 'errorformat'. ============================================================================== CONFIGURATION *cmake-configuration* Vim-CMake has sensible defaults, but aims to be configurable. A list of configuration options, with default values, follows. g:cmake_command (default: `'cmake'`) Name (or full path) of the CMake executable. g:cmake_default_config (default: `'Debug'`) Default build configuration on start-up. g:cmake_build_dir_location (default: `'.'`) Location of the build directory, relative to the project root. Each build configuration creates a build directory at this location. g:cmake_generate_options (default: `[]`) List of options to pass to CMake by default when running |:CMakeGenerate|. g:cmake_build_options (default: `[]`) List of options to pass to CMake by default when running |:CMakeBuild|. g:cmake_native_build_options (default: `[]`) List of options to pass to the native tool by default when running |:CMakeBuild|. g:cmake_console_size (default: `15`) Size of the CMake console window. g:cmake_console_position (default: `'botright'`) Command modifier to use when opening the CMake console window (see |:botright|). g:cmake_console_echo_cmd (default: `1`) Echo running command in the Vim-CMake console, before showing the output for the command itself. g:cmake_jump (default: `0`) Whether to jump to the CMake console window when running a `:CMake` command. g:cmake_jump_on_completion (default: `0`) Whether to jump to the CMake console window when a `:CMake` command completes. g:cmake_jump_on_error (default: `1`) Whether to jump to the CMake console window when a `:CMake` command returns an error. g:cmake_link_compile_commands (default: `0`) Whether to create a symlink in the CMake source directory to the `compile_commands.json` file. If this is enabled, the CMake configuration options `CMAKE_EXPORT_COMPILE_COMMANDS` will be set to `ON` (unless explicitly set to something else in the command-line arguments to `:CMakeGenerate`). NOTE: under MS-Windows, creating symlinks only work if the "Developer mode" is enabled, or if running the console as an administrator. g:cmake_root_markers (default: `['.git', '.svn']`) List of file/directory names used to locate the project root. When Vim-CMake is loaded, it looks for the project root starting from the CWD. g:cmake_log_file (default: `''`) Path to a file where to store the log of Vim-CMake. An empty value disables logging. ============================================================================== CONTRIBUTING *cmake-contributing* Feedback and feature requests are appreciated. Bug reports and pull requests are very welcome. Check the Contributing Guidelines for how to write a feature request, post an issue or submit a pull request: https://github.com/cdelledonne/vim-cmake/blob/master/CONTRIBUTING.md ============================================================================== LICENSE *cmake-license* MIT license. Copyright (c) 2020-2022 Carlo Delle Donne. ------------------------------------------------------------------------------ vim:tw=78:ts=8:noet:ft=help:norl: