parent
acd3688d16
commit
306bb3d4fc
@ -0,0 +1,20 @@
|
||||
---
|
||||
# Automatically generated from tests/@EXAMPLE_PERMALINK@/cmake.toml - DO NOT EDIT
|
||||
layout: default
|
||||
title: @EXAMPLE_TITLE@
|
||||
permalink: /examples/@EXAMPLE_PERMALINK@
|
||||
parent: Examples
|
||||
nav_order: @EXAMPLE_INDEX@
|
||||
---
|
||||
|
||||
# @EXAMPLE_TITLE@
|
||||
|
||||
@EXAMPLE_HEADER@
|
||||
|
||||
```toml
|
||||
@EXAMPLE_TOML@
|
||||
```
|
||||
|
||||
@EXAMPLE_FOOTER@
|
||||
|
||||
<sup><sub>This page was automatically generated from [tests/@EXAMPLE_PERMALINK@/cmake.toml](https://github.com/build-cpp/cmkr/tree/main/tests/@EXAMPLE_PERMALINK@/cmake.toml).</sub></sup>
|
@ -0,0 +1,73 @@
|
||||
option(CMKR_GENERATE_DOCUMENTATION "Generate cmkr documentation" ${CMKR_ROOT_PROJECT})
|
||||
set(CMKR_TESTS "" CACHE INTERNAL "List of test directories in the order declared in tests/cmake.toml")
|
||||
|
||||
if(CMKR_GENERATE_DOCUMENTATION)
|
||||
# Hook the add_test function to capture the tests in the order declared in tests/cmake.toml
|
||||
function(add_test)
|
||||
cmake_parse_arguments(TEST "" "WORKING_DIRECTORY" "" ${ARGN})
|
||||
list(APPEND CMKR_TESTS "${TEST_WORKING_DIRECTORY}")
|
||||
set(CMKR_TESTS "${CMKR_TESTS}" CACHE INTERNAL "")
|
||||
_add_test(${test} ${ARGN})
|
||||
endfunction()
|
||||
endif()
|
||||
|
||||
function(generate_documentation)
|
||||
if(CMKR_GENERATE_DOCUMENTATION)
|
||||
message(STATUS "[cmkr] Generating documentation...")
|
||||
|
||||
# Delete previously generated examples
|
||||
set(example_folder "${PROJECT_SOURCE_DIR}/docs/examples")
|
||||
file(GLOB example_files "${example_folder}/*.md")
|
||||
list(REMOVE_ITEM example_files "${example_folder}/index.md")
|
||||
file(REMOVE ${example_files})
|
||||
|
||||
message(DEBUG "[cmkr] Test directories: ${CMKR_TESTS}")
|
||||
set(test_index 0)
|
||||
foreach(test_dir ${CMKR_TESTS})
|
||||
set(test_name "${test_dir}")
|
||||
set(test_dir "${PROJECT_SOURCE_DIR}/tests/${test_dir}")
|
||||
set(test_toml "${test_dir}/cmake.toml")
|
||||
if(IS_DIRECTORY "${test_dir}" AND EXISTS "${test_toml}")
|
||||
message(DEBUG "[cmkr] Generating documentation for: ${test_toml} (index: ${test_index})")
|
||||
|
||||
# Set template variables
|
||||
set(EXAMPLE_PERMALINK "${test_name}")
|
||||
set(EXAMPLE_INDEX ${test_index})
|
||||
math(EXPR test_index "${test_index}+1")
|
||||
|
||||
# Read cmake.toml file
|
||||
file(READ "${test_toml}" test_contents NO_HEX_CONVERSION)
|
||||
string(LENGTH "${test_contents}" toml_length)
|
||||
|
||||
# Extract header text
|
||||
string(REGEX MATCH "^(\n*(#[^\n]+\n)+\n*)" EXAMPLE_HEADER "${test_contents}")
|
||||
string(LENGTH "${EXAMPLE_HEADER}" header_length)
|
||||
string(STRIP "${EXAMPLE_HEADER}" EXAMPLE_HEADER)
|
||||
string(REGEX REPLACE "\n# ?" "\n" EXAMPLE_HEADER "\n${EXAMPLE_HEADER}")
|
||||
string(STRIP "${EXAMPLE_HEADER}" EXAMPLE_HEADER)
|
||||
|
||||
# Extract footer text
|
||||
string(REGEX MATCH "(((#[^\n]+)(\n+|$))+)$" EXAMPLE_FOOTER "${test_contents}")
|
||||
string(LENGTH "${EXAMPLE_FOOTER}" footer_length)
|
||||
string(STRIP "${EXAMPLE_FOOTER}" EXAMPLE_FOOTER)
|
||||
string(REGEX REPLACE "\n# ?" "\n" EXAMPLE_FOOTER "\n${EXAMPLE_FOOTER}")
|
||||
string(STRIP "${EXAMPLE_FOOTER}" EXAMPLE_FOOTER)
|
||||
|
||||
# Extract toml body
|
||||
math(EXPR toml_length "${toml_length}-${header_length}-${footer_length}")
|
||||
string(SUBSTRING "${test_contents}" ${header_length} ${toml_length} EXAMPLE_TOML)
|
||||
string(STRIP "${EXAMPLE_TOML}" EXAMPLE_TOML)
|
||||
|
||||
# Extract title from description
|
||||
if("${EXAMPLE_TOML}" MATCHES "description *= *\"([^\"]+)\"")
|
||||
set(EXAMPLE_TITLE "${CMAKE_MATCH_1}")
|
||||
|
||||
# Generate documentation markdown page
|
||||
configure_file("${PROJECT_SOURCE_DIR}/cmake/example.md.in" "${example_folder}/${EXAMPLE_PERMALINK}.md" @ONLY NEWLINE_STYLE LF)
|
||||
else()
|
||||
message(DEBUG "[cmkr] Skipping documentation generation for ${test_name} because description is missing")
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endfunction()
|
@ -1 +1,2 @@
|
||||
_site
|
||||
_site/
|
||||
.jekyll-metadata
|
@ -0,0 +1,26 @@
|
||||
---
|
||||
# Automatically generated from tests/basic/cmake.toml - DO NOT EDIT
|
||||
layout: default
|
||||
title: Minimal example
|
||||
permalink: /examples/basic
|
||||
parent: Examples
|
||||
nav_order: 0
|
||||
---
|
||||
|
||||
# Minimal example
|
||||
|
||||
A minimal `cmake.toml` project:
|
||||
|
||||
```toml
|
||||
[project]
|
||||
name = "basic"
|
||||
description = "Minimal example"
|
||||
|
||||
[target.basic]
|
||||
type = "executable"
|
||||
sources = ["src/basic.cpp"]
|
||||
```
|
||||
|
||||
Declares an executable target called `basic` with `src/basic.cpp` as a source file. Equivalent to CMake's [add_executable](https://cmake.org/cmake/help/latest/command/add_executable.html)`(basic src/basic.cpp)`.
|
||||
|
||||
<sup><sub>This page was automatically generated from [tests/basic/cmake.toml](https://github.com/build-cpp/cmkr/tree/main/tests/basic/cmake.toml).</sub></sup>
|
@ -1,17 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
title: Changing C/C++ version
|
||||
permalink: /examples/cpp-version-change
|
||||
parent: Examples
|
||||
nav_order: 3
|
||||
---
|
||||
|
||||
# Changing C/C++ version
|
||||
|
||||
Simple example changing C++ to version 20 and C standard to the version 11
|
||||
|
||||
```toml
|
||||
[target.example]
|
||||
type = "executable"
|
||||
compile-features = [ "cxx_std_20", "c_std_11" ]
|
||||
```
|
@ -0,0 +1,30 @@
|
||||
---
|
||||
# Automatically generated from tests/fetch-content/cmake.toml - DO NOT EDIT
|
||||
layout: default
|
||||
title: Fetching from git
|
||||
permalink: /examples/fetch-content
|
||||
parent: Examples
|
||||
nav_order: 2
|
||||
---
|
||||
|
||||
# Fetching from git
|
||||
|
||||
Downloads [fmt v7.1.3](https://fmt.dev/7.1.3/) from [GitHub](https://github.com) and links an `example` target to it:
|
||||
|
||||
```toml
|
||||
[project]
|
||||
name = "fetch-content"
|
||||
description = "Fetching from git"
|
||||
|
||||
[fetch-content]
|
||||
fmt = { git = "https://github.com/fmtlib/fmt", tag = "7.1.3" }
|
||||
|
||||
[target.example]
|
||||
type = "executable"
|
||||
sources = ["src/main.cpp"]
|
||||
link-libraries = ["fmt::fmt"]
|
||||
```
|
||||
|
||||
This is equivalent to calling CMake's [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.html).
|
||||
|
||||
<sup><sub>This page was automatically generated from [tests/fetch-content/cmake.toml](https://github.com/build-cpp/cmkr/tree/main/tests/fetch-content/cmake.toml).</sub></sup>
|
@ -1,22 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
title: Import content from Github
|
||||
permalink: /examples/import-from-git
|
||||
parent: Examples
|
||||
nav_order: 2
|
||||
---
|
||||
|
||||
# Import content from Github
|
||||
|
||||
Importing an existing project called Zydis to my project
|
||||
|
||||
tag is optional but you can target any branch with it
|
||||
|
||||
```toml
|
||||
[fetch-content]
|
||||
zydis = { git = "https://github.com/zyantific/zydis.git", tag = "v3.1.0" }
|
||||
|
||||
[target.example]
|
||||
type = "executable"
|
||||
link-libraries = ["zydis"]
|
||||
```
|
@ -1,10 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
title: Examples
|
||||
permalink: /examples/
|
||||
nav_order: 4
|
||||
has_children: true
|
||||
---
|
||||
|
||||
# Examples
|
||||
|
@ -0,0 +1,11 @@
|
||||
---
|
||||
layout: default
|
||||
title: Examples
|
||||
permalink: /examples/
|
||||
nav_order: 100
|
||||
has_children: true
|
||||
---
|
||||
|
||||
# Examples
|
||||
|
||||
The examples in this section are automatically generated from the [tests](https://github.com/build-cpp/cmkr/blob/main/tests/cmake.toml).
|
@ -0,0 +1,31 @@
|
||||
---
|
||||
# Automatically generated from tests/interface/cmake.toml - DO NOT EDIT
|
||||
layout: default
|
||||
title: Header-only library
|
||||
permalink: /examples/interface
|
||||
parent: Examples
|
||||
nav_order: 1
|
||||
---
|
||||
|
||||
# Header-only library
|
||||
|
||||
|
||||
|
||||
```toml
|
||||
[project]
|
||||
name = "interface"
|
||||
description = "Header-only library"
|
||||
|
||||
[target.mylib]
|
||||
type = "interface"
|
||||
include-directories = ["include"]
|
||||
|
||||
[target.example]
|
||||
type = "executable"
|
||||
sources = ["src/main.cpp"]
|
||||
link-libraries = ["mylib"]
|
||||
```
|
||||
|
||||
|
||||
|
||||
<sup><sub>This page was automatically generated from [tests/interface/cmake.toml](https://github.com/build-cpp/cmkr/tree/main/tests/interface/cmake.toml).</sub></sup>
|
@ -1,23 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
title: Quickstart
|
||||
permalink: /examples/quickstart
|
||||
parent: Examples
|
||||
nav_order: 1
|
||||
---
|
||||
|
||||
# Quickstart
|
||||
|
||||
Smallest possible start point you can have using cmkr
|
||||
|
||||
```toml
|
||||
[cmake]
|
||||
version = "3.15"
|
||||
|
||||
[project]
|
||||
name = "hello-world"
|
||||
|
||||
[target.hello-world]
|
||||
type = "executable"
|
||||
sources = [ "src/*.cpp" ]
|
||||
```
|
@ -0,0 +1,2 @@
|
||||
bundle install
|
||||
bundle exec jekyll serve --force_polling --livereload --incremental
|
@ -1,9 +1,11 @@
|
||||
[cmake]
|
||||
version = "3.5"
|
||||
# A minimal `cmake.toml` project:
|
||||
|
||||
[project]
|
||||
name = "basic"
|
||||
description = "Minimal example"
|
||||
|
||||
[target.basic]
|
||||
type = "executable"
|
||||
sources = ["src/basic.cpp"]
|
||||
|
||||
# Declares an executable target called `basic` with `src/basic.cpp` as a source file. Equivalent to CMake's [add_executable](https://cmake.org/cmake/help/latest/command/add_executable.html)`(basic src/basic.cpp)`.
|
@ -1,17 +1,23 @@
|
||||
[[test]]
|
||||
name = "basic"
|
||||
command = "$<TARGET_FILE:cmkr>"
|
||||
working-directory = "${CMAKE_CURRENT_LIST_DIR}/basic"
|
||||
working-directory = "basic"
|
||||
arguments = ["build"]
|
||||
|
||||
[[test]]
|
||||
name = "conditions"
|
||||
name = "interface"
|
||||
command = "$<TARGET_FILE:cmkr>"
|
||||
working-directory = "${CMAKE_CURRENT_LIST_DIR}/conditions"
|
||||
working-directory = "interface"
|
||||
arguments = ["build"]
|
||||
|
||||
[[test]]
|
||||
name = "interface"
|
||||
name = "fetch-content"
|
||||
command = "$<TARGET_FILE:cmkr>"
|
||||
working-directory = "fetch-content"
|
||||
arguments = ["build"]
|
||||
|
||||
[[test]]
|
||||
name = "conditions"
|
||||
command = "$<TARGET_FILE:cmkr>"
|
||||
working-directory = "${CMAKE_CURRENT_LIST_DIR}/interface"
|
||||
working-directory = "conditions"
|
||||
arguments = ["build"]
|
@ -0,0 +1,15 @@
|
||||
# Downloads [fmt v7.1.3](https://fmt.dev/7.1.3/) from [GitHub](https://github.com) and links an `example` target to it:
|
||||
|
||||
[project]
|
||||
name = "fetch-content"
|
||||
description = "Fetching from git"
|
||||
|
||||
[fetch-content]
|
||||
fmt = { git = "https://github.com/fmtlib/fmt", tag = "7.1.3" }
|
||||
|
||||
[target.example]
|
||||
type = "executable"
|
||||
sources = ["src/main.cpp"]
|
||||
link-libraries = ["fmt::fmt"]
|
||||
|
||||
# This is equivalent to calling CMake's [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.html).
|
@ -0,0 +1,6 @@
|
||||
#include <fmt/core.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
fmt::print("Hello, world!\n");
|
||||
}
|
Loading…
Reference in new issue