This project is a template that cannot be used before initialization. To initialize your project, you must run the following shell command:
cmake -P init.cmake --project <name> --module <name> --header <name>- Project name will become your top-level CMake project name
- Must be alphanumeric and begin with a character.
- Module name will be concatenated with your project name to determine the library's namespace (
${project}::${module}) - Header name will become the name of your library's main include header
To build the project locally, you will need to select a CMake preset that matches your system configuration. Your system's configuration is described by a triplet. This is inspired by rust triples.
Presets for the most common system triplets are defined in cmake/presets/ and presented via CMakePresets.json.
Notice that each system triplet defines a preset for multiple compilers. If you have a compiler preference, you can pick the respective preset. If you do not have a preference, you can choose the following reccomendation (depending on your OS):
- Windows:
msvc - MacOS:
clang - Linux:
gcc
Now you can configure and build your project:
cmake --workflow --preset=<PRESET>This is equivalend to running the following in a step-by-step proceedure:
# Configure
cmake --preset=<PRESET>
# Build
cmake --build --preset=<PRESET>
# Test
ctest --preset=<PRESET>Regardless of how you build, the build/<PRESET> folder will be populated with the binaries for all of your CMake targets.
By default, this template comes with a CLI entrypoint defined in src/cli/src/main.cpp, and one module/library defined in your src folder. The Command Line Interface contains a very basic main function, and can be run after building by the build/<PRESET>/src/cli/<Debug|Release|RelWithDebInfo>/<PROJECT_NAME>_cli executable(s).
Tests are run with Catch2. They can be written in the tests subdirectory, and run with CTest:
ctest --preset <PRESET>For usage within another C++ project, you can add the following to your CMake configuration:
find_package(<PROJECT_NAME> CONFIG REQUIRED)
target_link_libraries(<TARGET> PUBLIC <PROJECT_NAME>::<MODULE_NAME>)This will require that your library is published and installed via vcpkg or found locally by setting the CMAKE_PREFIX_PATH environment variable in your other project during configure.