CMake¶
Maud generates a CMakeLists.txt which is simple enough to be in
.gitignore
(but you can also modify it/check it in if you like).
The generated CMakeLists.txt is packed with features, including automatic
discovery of your source files and inferrence of targets and linkage from
their contents.
Auto-inclusion¶
Whenever explicit configuration is necessary, .cmake modules may be included
anywhere in the source tree- close to the portion of the project they affect.
.cmake modules are detected and automatically included by CMakeLists.txt.
These might be used to:
declare project Options
specify additional files to be installed
generate source files
set source file properties, for example MAUD_PREPROCESSING_SCAN_OPTIONS
use
find_package()orFetchContentto set up non-maud dependencies
Auto-included modules have access to:
${MAUD_DIR}(aka
${CMAKE_BINARY_DIR}/_maud) a directory into which maud-specific build files will be written.- glob()
which produces a list of matching files.
${dir}the directory containing the current auto-included cmake module (a convenience alias for
${CMAKE_CURRENT_LIST_DIR})- option()
which extends cmake’s built-in build option declarations.
string_escape()escapes a string for inclusion in C or json.
cmake_modules directories¶
.cmake modules for which greater control of inclusion is required can be
placed in directories named cmake_modules. Any cmake_modules directories
will be added to CMAKE_MODULE_PATH
and their contents will be available for explicit inclusion, including by
auto-included modules. These directories might contain:
Declaration of a cluster of related project Options referenced by multiple other cmake modules, grouped for clarity
A
Find<PackgeName>.cmakescript for use with find_package()
Use of include_guard() is strongly recommended to ensure that explicitly included modules are only included once.