diff --git a/README.md b/README.md index 169068e..3e0f992 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,12 @@ cmkr, pronounced "cmaker", is A CMakeLists.txt generator from TOML. +See the [cmkr topic](https://github.com/topics/cmkr) for examples. Feel free to add the `cmkr` topic to your projects if you used cmkr! ## Building + cmkr requires a C++11 compiler, cmake >= 3.15. + ``` git clone https://github.com/moalyousef/cmkr cd cmkr @@ -13,7 +16,9 @@ cmake --build bin --parallel ``` ## Usage + cmkr parses cmake.toml files (using toml11 by Toru Niina) at the project directory. A basic hello world format with the minimum required fields: + ```toml [cmake] minimum = "3.15" @@ -22,106 +27,15 @@ minimum = "3.15" name = "app" version = "0.1.0" -[[target]] -name = "app" +[target.app] type = "executable" sources = ["src/main.cpp"] ``` -This project's cmake.toml: -```toml -[cmake] -minimum = "3.15" - -[project] -name = "cmkr" -version = "0.1.4" -description = "CMakeLists generator from TOML" - -[fetch-content] -toml11 = { git = "https://github.com/ToruNiina/toml11" } -filesystem = { git = "https://github.com/gulrak/filesystem" } -mpark_variant = { url = "https://github.com/mpark/variant/archive/v1.4.0.tar.gz" } - -[[target]] -name = "cmkrlib" -type = "static" -sources = ["src/cmake.cpp", "src/gen.cpp", "src/help.cpp", "src/build.cpp", "src/error.cpp"] -include-directories = ["include"] -compile-features = ["cxx_std_11"] -link-libraries = ["toml11::toml11", "ghc_filesystem"] - -[[target]] -name = "cmkr" -type = "executable" -sources = ["src/main.cpp", "src/args.cpp"] -link-libraries = ["cmkrlib"] - -[[install]] -targets = ["cmkr"] -destination = "${CMAKE_INSTALL_PREFIX}/bin" -``` - -Currently supported fields: -```toml -[cmake] # required for top-level project -minimum = "3.15" # required -description = "" # optional -subdirs = [] # optional -build-dir = "build" # optional -cpp-flags = [] # optional -c-flags = [] # optional -link-flags = [] # optional -generator = "Ninja" # optional, only valid when run using: cmkr build -config = "Release" # optional, only valid when run using: cmkr build -arguments = ["CMAKE_TOOLCHAIN_FILE=/path/to/toolchain"] # optional, valid when run using: cmkr build - -[settings] # optional -CMAKE_BUILD_TYPE = "Release" -TOML_BUILD_TESTS = false # optional -TOML_BUILD_DOCS = { value = false, comment = "builds dependency docs", cache = true, force = true } # optional -OLD_VERSION = "0.1.1" # optional - -[project] # required per project -name = "app" # required -version = "0.1.0" # required - -[find-package] # optional, runs find_package, use "*" to ignore version -Boost = { version = "1.74.0", required = false, components = ["system"] } # optional -spdlog = "*" - -[fetch-content] # optional, runs fetchContent -toml11 = { git = "https://github.com/ToruNiina/toml11", tag = "v3.5.0" } # optional - -[options] # optional -APP_BUILD_STUFF = false # optional -APP_OTHER_STUFF = { comment = "does other stuff", value = false } # optional - -[[target]] # required, can define several binaries -name = "app" # required -type = "executable" # required (executable || library || shared || static || interface) -sources = ["src/*.cpp"] # required, supports globbing -include-directories = ["include"] # optional -alias = "" # optional -compile-features = [] # optional -compile-definitions = [] # optional -link-libraries = [] # optional -properties = { PROPERTY1 = "property1", ... } # optional - -[[test]] # optional, can define several -name = "test1" # required -command = "app" # required -arguments = ["arg1", "arg2"] # optional - -[[install]] # optional, can define several -targets = ["app"] # optional -files = ["include/*.h"] # optional -dirs = [] # optional -configs = [] # optional (Release|Debug...etc) -destination = "${CMAKE_INSTALL_PREFIX}/bin" # required -``` +**NOTE**: The documentation is currently a work-in-progress due to breaking changes since `0.1.4`. For examples you can check the [cmkr topic](https://github.com/topics/cmkr). The cmkr executable can be run from the command-line: + ``` Usage: cmkr [arguments] arguments: @@ -133,7 +47,9 @@ arguments: help Show help. version Current cmkr version. ``` + The build command invokes cmake and the default build-system on your platform (unless a generator is specified), it also accepts extra cmake build arguments: + ``` cmkr build --config Release ``` @@ -141,20 +57,26 @@ cmkr build --config Release ## Binary types ### executable + Executable binary. Equivalent to [add_executable(name)](https://cmake.org/cmake/help/latest/command/add_executable.html). ### library + Library, can be static or shared depending on the BUILD_SHARED_LIBS variable. Equivalent to [add_library()](https://cmake.org/cmake/help/latest/command/add_library.html). ### static + Static library/archive. Equivalent to [add_library(name STATIC)](https://cmake.org/cmake/help/latest/command/add_library.html). ### shared + Shared/dynamic library. Equivalent to [add_library(name SHARED)](https://cmake.org/cmake/help/latest/command/add_library.html). ### interface + Header-only library. Equivalent to [add_library(name INTERFACE)](https://cmake.org/cmake/help/latest/command/add_library.html). ## Roadmap + - Support more cmake fields. - Support conditional cmake args somehow!