cmkr
cmkr
, pronounced "cmaker", is a modern build system based on CMake and TOML.
cmkr
parses cmake.toml
files and generates a modern, idiomatic CMakeLists.txt
for you. A minimal example:
[project]
name = "cmkr_for_beginners"
[target.hello_world]
type = "executable"
sources = ["src/main.cpp"]
cmkr
can bootstrap itself and you only need CMake and a C++ compiler to use it.
Getting started
To get started, run the following commands from your project directory:
curl https://raw.githubusercontent.com/build-cpp/cmkr/main/cmake/cmkr.cmake -o cmkr.cmake
cmake -P cmkr.cmake
After the bootstrapping process finishes, customize cmake.toml
for your project and run CMake:
cmake -B build
cmake --build build
Once bootstrapped, cmkr
does not introduce extra steps to your workflow. After modifying cmake.toml
you simply build/configure your CMake project and cmkr
will automatically regenerate CMakeLists.txt
when necessary.
Note: The cmake.toml
project file, generated CMakeLists.txt
and cmkr.cmake
bootstrapping script are all intended to be added to source control.
In CI environments the cmkr
bootstrapping process is skipped, so there is no additional overhead in your pipelines.
Template repositories
Another way to get started is to use the cmkr_for_beginners template repository. Either open it in Gitpod, or clone the repository and run:
cmake -B build
cmake --build build
Check out the cmkr topic, the build-cpp organization or the tests for more examples and templates.
Command line
Optionally you can put a cmkr
release in your PATH
and use it as a utility from the command line:
Usage: cmkr [arguments]
arguments:
init [executable|library|shared|static|interface] Create a project.
gen Generates CMakeLists.txt file.
build <extra cmake args> Run cmake and build.
install Run cmake --install.
clean Clean the build directory.
help Show help.
version Current cmkr version.
Credits
- gulrak/filesystem
- Tessil/ordered-map
- ToruNiina/toml11
- mpark/variant
- SVG Repo Hammer
- can1357 for buying
cmkr.build
❤️ - JustasMasiulis for fixing the dark theme ❤️