CMakeLists.txt file contains a set of directives and instructions describing the project's source files and targets (executable, library, or both).
When you create a new project, CLion generates CMakeLists.txt file automatically and places it in the project root directory. To open a project, you can point CLion to the top-level CMakeLists.txt and choose Open as Project.
Example below shows the CMakeLists.txt file of a simple "Hello, World!" project:
You can edit CMakeLists.txt files right in the Editor. Make sure to reload the project after editing. Automatic reload feature is disabled by default, you can turn it on by selecting the Automatically reload CMake project on editing checkbox in .
For projects with complex structure, you can create subdirectory CMakeList.txt files to describe the build, contents, and target rules for a subdirectory. Type of a target added by a subdirectory CMakeLists.txt file can differ depending on the role of the module.
CLion provides code assistance in CMakeLists.txt files. Also, you can configure code style settings for this file format in .
CMakeLists.txt file templates
When you create a CMake or CMake-based (CUDA, Qt) project via the New Project wizard, CLion uses different templates to generate CMakeLists.txt depending on the project type and settings. You can fine-tune these templates in , the Other tab:
When editing a template text, you can use common predefined variables and the following CMake-specific variables:
- the main.cpp/main.c/libary.cpp/library.c file of the project.
- the selected language standard.
- the major number of the minimum supported CMake version. For example, if the version if
- the minor number of the minimum supported CMake version. For example, if the version if
- the selected Qt version.
- the Qt libraries required for the selected project type. By default, they are
There is also a template for CMake scripts that you can add to an existing project via Files tab:in the context menu of the project view. By default, this template is empty. You can edit it using the same variables in , the