1
0
Fork 0
mirror of https://github.com/TheLartians/ModernCppStarter.git synced 2025-08-30 21:51:12 +02:00

- Add CMake Workflow Presets

- Upgrade to gitup workflow action v3
- Prepare use of git-flow
- Use CMake v3.21 variable PROJECT_IS_TOP_LEVEL
- Use CMAKE_DEBUG_POSTFIX to prevent name clashes
- Add more config files
This commit is contained in:
Claus Klein 2023-07-31 07:13:34 +02:00
parent fcbedfe9d8
commit d81a42450c
22 changed files with 540 additions and 31 deletions

View file

@ -22,7 +22,9 @@ parse:
SVN_REPOSITORY: 1 SVN_REPOSITORY: 1
SVN_REVISION: 1 SVN_REVISION: 1
SOURCE_DIR: 1 SOURCE_DIR: 1
SYSTEM: 1
DOWNLOAD_COMMAND: 1 DOWNLOAD_COMMAND: 1
EXCLUDE_FROM_ALL: 1
FIND_PACKAGE_ARGUMENTS: 1 FIND_PACKAGE_ARGUMENTS: 1
NO_CACHE: 1 NO_CACHE: 1
GIT_SHALLOW: 1 GIT_SHALLOW: 1

14
.envrc Normal file
View file

@ -0,0 +1,14 @@
# Define environment in this dir only with direnv.
# On first usage enter: direnv allow
# man direnv for more infos
#
# see too https://cmake.org/cmake/help/latest/manual/cmake-env-variables.7.html
export CMAKE_PREFIX_PATH=${PWD}/stagedir
export CMAKE_EXPORT_COMPILE_COMMANDS=YES
export CTEST_OUTPUT_ON_FAILURE=YES
export CPM_USE_LOCAL_PACKAGES=YES
export CPM_SOURCE_CACHE=${PWD}/.cache/CPM
export LD_LIBRARY_PATH=${CMAKE_PREFIX_PATH}/lib
export BUILD_DIR=${PWD}/build

View file

@ -1,14 +1,15 @@
---
name: Install name: Install
on: on:
push: push:
branches: branches:
- master - master
- main - develop
pull_request: pull_request:
branches: branches:
- master - master
- main - develop
env: env:
CTEST_OUTPUT_ON_FAILURE: 1 CTEST_OUTPUT_ON_FAILURE: 1
@ -33,7 +34,7 @@ jobs:
rm -rf build rm -rf build
- name: configure - name: configure
run: cmake -Stest -Bbuild -DTEST_INSTALLED_VERSION=1 run: cmake -S test -B build -D TEST_INSTALLED_VERSION=1
- name: build - name: build
run: cmake --build build --config Debug -j4 run: cmake --build build --config Debug -j4

View file

@ -1,14 +1,15 @@
---
name: MacOS name: MacOS
on: on:
push: push:
branches: branches:
- master - master
- main - develop
pull_request: pull_request:
branches: branches:
- master - master
- main - develop
env: env:
CTEST_OUTPUT_ON_FAILURE: 1 CTEST_OUTPUT_ON_FAILURE: 1
@ -27,7 +28,7 @@ jobs:
key: ${{ github.workflow }}-cpm-modules-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }} key: ${{ github.workflow }}-cpm-modules-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }}
- name: configure - name: configure
run: cmake -Stest -Bbuild -DCMAKE_BUILD_TYPE=Debug run: cmake -S test -B build -D CMAKE_BUILD_TYPE=Debug
- name: build - name: build
run: cmake --build build -j4 run: cmake --build build -j4

View file

@ -1,14 +1,15 @@
---
name: Standalone name: Standalone
on: on:
push: push:
branches: branches:
- master - master
- main - develop
pull_request: pull_request:
branches: branches:
- master - master
- main - develop
env: env:
CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm_modules CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm_modules
@ -26,7 +27,7 @@ jobs:
key: ${{ github.workflow }}-cpm-modules-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }} key: ${{ github.workflow }}-cpm-modules-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }}
- name: configure - name: configure
run: cmake -Sstandalone -Bbuild -DCMAKE_BUILD_TYPE=Debug run: cmake -S standalone -B build -D CMAKE_BUILD_TYPE=Debug
- name: build - name: build
run: cmake --build build -j4 run: cmake --build build -j4

View file

@ -1,14 +1,15 @@
---
name: Style name: Style
on: on:
push: push:
branches: branches:
- master - master
- main - develop
pull_request: pull_request:
branches: branches:
- master - master
- main - develop
env: env:
CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm_modules CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm_modules
@ -29,7 +30,7 @@ jobs:
run: pip3 install clang-format==14.0.6 cmake_format==0.6.11 pyyaml run: pip3 install clang-format==14.0.6 cmake_format==0.6.11 pyyaml
- name: configure - name: configure
run: cmake -Stest -Bbuild run: cmake -S test -B build
- name: check style - name: check style
run: cmake --build build --target check-format run: cmake --build build --target check-format

View file

@ -1,14 +1,15 @@
---
name: Ubuntu name: Ubuntu
on: on:
push: push:
branches: branches:
- master - master
- main - develop
pull_request: pull_request:
branches: branches:
- master - master
- main - develop
env: env:
CTEST_OUTPUT_ON_FAILURE: 1 CTEST_OUTPUT_ON_FAILURE: 1
@ -28,7 +29,7 @@ jobs:
key: ${{ github.workflow }}-cpm-modules-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }} key: ${{ github.workflow }}-cpm-modules-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }}
- name: configure - name: configure
run: cmake -Stest -Bbuild -DENABLE_TEST_COVERAGE=1 -DCMAKE_BUILD_TYPE=Debug run: cmake -S test -B build -D ENABLE_TEST_COVERAGE=1 -D CMAKE_BUILD_TYPE=Debug
- name: build - name: build
run: cmake --build build -j4 run: cmake --build build -j4

View file

@ -1,14 +1,15 @@
---
name: Windows name: Windows
on: on:
push: push:
branches: branches:
- master - master
- main - develop
pull_request: pull_request:
branches: branches:
- master - master
- main - develop
env: env:
CTEST_OUTPUT_ON_FAILURE: 1 CTEST_OUTPUT_ON_FAILURE: 1
@ -27,7 +28,7 @@ jobs:
key: ${{ github.workflow }}-cpm-modules-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }} key: ${{ github.workflow }}-cpm-modules-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }}
- name: configure - name: configure
run: cmake -Stest -Bbuild run: cmake -S test -B build -G "Visual Studio 17 2022" -D BUILD_SHARED_LIBS=NO
- name: build - name: build
run: cmake --build build --config Debug -j4 run: cmake --build build --config Debug -j4

5
.gitignore vendored
View file

@ -1,4 +1,7 @@
*~
*.swp
/build* /build*
/stagedir
/.vscode /.vscode
/cpm_modules /cpm_modules
.DS_Store .DS_Store

View file

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.14...3.27) cmake_minimum_required(VERSION 3.21...3.27)
# ---- Project ---- # ---- Project ----
@ -18,18 +18,25 @@ if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
) )
endif() endif()
if(NOT PROJECT_IS_TOP_LEVEL)
option(CMAKE_SKIP_INSTALL_RULES "Whether to disable generation of installation rules" YES)
endif()
option(OPTION_ENABLE_UNITY "Enable Unity builds of project" ON)
# ---- Add dependencies via CPM ---- # ---- Add dependencies via CPM ----
# see https://github.com/TheLartians/CPM.cmake for more info # see https://github.com/TheLartians/CPM.cmake for more info
include(cmake/CPM.cmake) include(cmake/CPM.cmake)
# PackageProject.cmake will be used to make our target installable # PackageProject.cmake will be used to make our target installable
CPMAddPackage("gh:TheLartians/PackageProject.cmake@1.8.0") CPMAddPackage("gh:TheLartians/PackageProject.cmake@1.10.0")
CPMAddPackage( CPMAddPackage(
NAME fmt NAME fmt
GIT_TAG 9.1.0 GIT_TAG 9.1.0
GITHUB_REPOSITORY fmtlib/fmt GITHUB_REPOSITORY fmtlib/fmt
SYSTEM ON # used in case of cmake v3.25
OPTIONS "FMT_INSTALL YES" # create an installable target OPTIONS "FMT_INSTALL YES" # create an installable target
) )
@ -46,12 +53,15 @@ file(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/source/
# target: add_library(${PROJECT_NAME} INTERFACE) # target: add_library(${PROJECT_NAME} INTERFACE)
add_library(${PROJECT_NAME} ${headers} ${sources}) add_library(${PROJECT_NAME} ${headers} ${sources})
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
set_target_properties(${PROJECT_NAME} PROPERTIES UNITY_BUILD ${OPTION_ENABLE_UNITY})
# enable compiler warnings if(PROJECT_IS_TOP_LEVEL)
include(cmake/WarningsAsErrors.cmake) # enable compiler warnings
include(cmake/WarningsAsErrors.cmake)
# being a cross-platform target, we enforce standards conformance on MSVC # being a cross-platform target, we enforce standards conformance on MSVC
target_compile_options(${PROJECT_NAME} PRIVATE "$<$<COMPILE_LANG_AND_ID:CXX,MSVC>:/permissive->") target_compile_options(${PROJECT_NAME} PRIVATE "$<$<COMPILE_LANG_AND_ID:CXX,MSVC>:/permissive->")
endif()
# Link dependencies # Link dependencies
target_link_libraries(${PROJECT_NAME} PUBLIC fmt::fmt) target_link_libraries(${PROJECT_NAME} PUBLIC fmt::fmt)
@ -79,3 +89,5 @@ packageProject(
COMPATIBILITY SameMajorVersion COMPATIBILITY SameMajorVersion
DEPENDENCIES "fmt 9.1.0" DEPENDENCIES "fmt 9.1.0"
) )
include(CPack)

97
CMakePresets.json Normal file
View file

@ -0,0 +1,97 @@
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 25,
"patch": 0
},
"configurePresets": [
{
"name": "default",
"displayName": "Default user Config",
"description": "Default build using Ninja generator",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/default",
"installDir": "${sourceDir}/stagedir",
"cacheVariables": {
"CMAKE_PREFIX_PATH": {
"type": "path",
"value": "${sourceDir}/stagedir"
},
"CMAKE_CXX_STANDARD": "20",
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_DEBUG_POSTFIX": "D",
"BUILD_SHARED_LIBS": "NO"
},
"environment": {
"CPM_USE_LOCAL_PACKAGES": "YES",
"PATH": "$env{HOME}/.local/bin${pathListSep}$penv{PATH}"
},
"warnings": {
"deprecated": true,
"uninitialized": true
}
},
{
"name": "ninja-multi",
"inherits": "default",
"displayName": "Ninja Multi-Config",
"description": "Default build using Ninja Multi-Config generator",
"generator": "Ninja Multi-Config"
},
{
"name": "windows-only",
"inherits": "default",
"displayName": "Windows-only configuration",
"description": "This build is only available on Windows",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
}
],
"buildPresets": [
{
"name": "default",
"configurePreset": "default"
},
{
"name": "install",
"configurePreset": "default",
"targets": ["install"]
}
],
"packagePresets": [
{
"name": "default",
"configurePreset": "default",
"generators": [
"TGZ"
]
}
],
"workflowPresets": [
{
"name": "default",
"steps": [
{
"type": "configure",
"name": "default"
},
{
"type": "build",
"name": "default"
},
{
"type": "build",
"name": "install"
},
{
"type": "package",
"name": "default"
}
]
}
]
}

View file

@ -27,6 +27,7 @@ This template is the result of learnings from many previous projects and should
- Installable target with automatic versioning information and header generation via [PackageProject.cmake](https://github.com/TheLartians/PackageProject.cmake) - Installable target with automatic versioning information and header generation via [PackageProject.cmake](https://github.com/TheLartians/PackageProject.cmake)
- Automatic [documentation](https://thelartians.github.io/ModernCppStarter) and deployment with [Doxygen](https://www.doxygen.nl) and [GitHub Pages](https://pages.github.com) - Automatic [documentation](https://thelartians.github.io/ModernCppStarter) and deployment with [Doxygen](https://www.doxygen.nl) and [GitHub Pages](https://pages.github.com)
- Support for [sanitizer tools, and more](#additional-tools) - Support for [sanitizer tools, and more](#additional-tools)
- Supports [CMake Workflow Presets](https://cmake.org/cmake/help/v3.25/manual/cmake-presets.7.html#id10)
## Usage ## Usage
@ -52,6 +53,8 @@ During development it is usually convenient to [build all subprojects at once](#
Use the following command to build and run the executable target. Use the following command to build and run the executable target.
```bash ```bash
cd standalone && cmake --workflow --preset=default
# or
cmake -S standalone -B build/standalone cmake -S standalone -B build/standalone
cmake --build build/standalone cmake --build build/standalone
./build/standalone/Greeter --help ./build/standalone/Greeter --help
@ -62,6 +65,8 @@ cmake --build build/standalone
Use the following commands from the project's root directory to run the test suite. Use the following commands from the project's root directory to run the test suite.
```bash ```bash
cd test && cmake --workflow --preset=default
# or
cmake -S test -B build/test cmake -S test -B build/test
cmake --build build/test cmake --build build/test
CTEST_OUTPUT_ON_FAILURE=1 cmake --build build/test --target test CTEST_OUTPUT_ON_FAILURE=1 cmake --build build/test --target test
@ -114,6 +119,8 @@ The project also includes an `all` directory that allows building all targets at
This is useful during development, as it exposes all subprojects to your IDE and avoids redundant builds of the library. This is useful during development, as it exposes all subprojects to your IDE and avoids redundant builds of the library.
```bash ```bash
cd all && cmake --workflow --preset=default
# or
cmake -S all -B build cmake -S all -B build
cmake --build build cmake --build build

View file

@ -1,7 +1,7 @@
# this script adds all subprojects to a single build to allow IDEs understand the full project # this script adds all subprojects to a single build to allow IDEs understand the full project
# structure. # structure.
cmake_minimum_required(VERSION 3.14...3.27) cmake_minimum_required(VERSION 3.21...3.27)
project(BuildAll LANGUAGES CXX) project(BuildAll LANGUAGES CXX)

103
all/CMakePresets.json Normal file
View file

@ -0,0 +1,103 @@
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"configurePresets": [
{
"name": "default",
"displayName": "Default develop all Config",
"description": "Default build using Ninja generator",
"generator": "Ninja",
"binaryDir": "${sourceParentDir}/build/all",
"installDir": "${sourceParentDir}/stagedir",
"cacheVariables": {
"CMAKE_PREFIX_PATH": {
"type": "path",
"value": "${sourceParentDir}/stagedir"
},
"CMAKE_CXX_STANDARD": "20",
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_DEBUG_POSTFIX": "D",
"CPM_USE_LOCAL_PACKAGES": "NO",
"BUILD_SHARED_LIBS": "YES",
"ENABLE_TEST_COVERAGE": "YES"
},
"environment": {
"CPM_USE_LOCAL_PACKAGES": "YES",
"PATH": "$env{HOME}/.local/bin${pathListSep}$penv{PATH}"
}
},
{
"name": "ninja-multi",
"inherits": "default",
"displayName": "Ninja Multi-Config",
"description": "Default build using Ninja Multi-Config generator",
"generator": "Ninja Multi-Config"
},
{
"name": "windows-only",
"inherits": "default",
"displayName": "Windows-only configuration",
"description": "This build is only available on Windows",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
}
],
"buildPresets": [
{
"name": "default",
"configurePreset": "default"
},
{
"name": "format",
"configurePreset": "default",
"targets": ["fix-clang-format", "check-cmake-format"]
}
],
"testPresets": [
{
"name": "default",
"configurePreset": "default",
"output": {"outputOnFailure": true},
"execution": {"noTestsAction": "error", "stopOnFailure": true}
}
],
"packagePresets": [
{
"name": "default",
"configurePreset": "default",
"generators": [
"TGZ"
]
}
],
"workflowPresets": [
{
"name": "default",
"steps": [
{
"type": "configure",
"name": "default"
},
{
"type": "build",
"name": "default"
},
{
"type": "build",
"name": "format"
},
{
"type": "test",
"name": "default"
}
]
}
]
}

View file

@ -6,6 +6,10 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 10.0) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 10.0)
target_compile_options(${PROJECT_NAME} PRIVATE -Wdeprecated-copy-dtor -Wnewline-eof) target_compile_options(${PROJECT_NAME} PRIVATE -Wdeprecated-copy-dtor -Wnewline-eof)
endif() endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang" AND CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 14.0)
target_compile_options(${PROJECT_NAME} PRIVATE -Wno-deprecated-declarations)
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
string(REGEX REPLACE " /W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REGEX REPLACE " /W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
target_compile_options(${PROJECT_NAME} PRIVATE /W4 /WX) target_compile_options(${PROJECT_NAME} PRIVATE /W4 /WX)

View file

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.14...3.27) cmake_minimum_required(VERSION 3.21...3.27)
project(GreeterDocs) project(GreeterDocs)

19
gcovr.cfg Normal file
View file

@ -0,0 +1,19 @@
root = .
search-path = build
filter = src/*
filter = include/*
filter = standalone/*
exclude-directories = test
exclude-directories = stagedir
exclude-directories = build/_deps
exclude-directories = .cache
gcov-ignore-parse-errors = yes
print-summary = yes
html-details = build/gcovr.html
cobertura-pretty = yes
cobertura = build/cobertura.xml

18
requirements.txt Normal file
View file

@ -0,0 +1,18 @@
# =============================================================================
# PYTHON PACKAGES (PIP)
# =============================================================================
# USE (python3): sudo pip3 install -r <THIS_FILE_NAME>
# =============================================================================
PyYAML>=5.4.1,<6.0
asyncio==3.4.3
builddriver==0.9.0
bumpversion>=0.6.0
cmake-format>=0.6.13
cmake>=3.25
gcovr>=5.2
ninja>=1.11
pytest-asyncio==0.19.0
pytest==7.1.3
tftpy>=0.8.2
wheel>=0.37.1

View file

@ -1,7 +1,16 @@
cmake_minimum_required(VERSION 3.14...3.27) cmake_minimum_required(VERSION 3.21...3.27)
project(GreeterStandalone LANGUAGES CXX) project(GreeterStandalone LANGUAGES CXX)
if(PROJECT_IS_TOP_LEVEL AND CMAKE_BUILD_TYPE STREQUAL "Release")
set(CMAKE_SKIP_INSTALL_RULES
NO
CACHE BOOL "Forced generation of installation rules" FORCE
)
endif()
option(OPTION_ENABLE_UNITY "Enable Unity builds of project" ON)
# --- Import tools ---- # --- Import tools ----
include(../cmake/tools.cmake) include(../cmake/tools.cmake)
@ -13,6 +22,7 @@ include(../cmake/CPM.cmake)
CPMAddPackage( CPMAddPackage(
GITHUB_REPOSITORY jarro2783/cxxopts GITHUB_REPOSITORY jarro2783/cxxopts
VERSION 3.1.1 VERSION 3.1.1
SYSTEM ON # used in case of cmake v3.25
OPTIONS "CXXOPTS_BUILD_EXAMPLES NO" "CXXOPTS_BUILD_TESTS NO" "CXXOPTS_ENABLE_INSTALL YES" OPTIONS "CXXOPTS_BUILD_EXAMPLES NO" "CXXOPTS_BUILD_TESTS NO" "CXXOPTS_ENABLE_INSTALL YES"
) )
@ -27,8 +37,22 @@ CPMAddPackage(
file(GLOB sources CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp) file(GLOB sources CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp)
add_executable(${PROJECT_NAME} ${sources}) add_executable(${PROJECT_NAME} ${sources})
if(CMAKE_DEBUG_POSTFIX)
set_property(TARGET ${PROJECT_NAME} PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
endif()
target_link_libraries(${PROJECT_NAME} Greeter::Greeter cxxopts::cxxopts)
set_target_properties(${PROJECT_NAME} PROPERTIES UNITY_BUILD ${OPTION_ENABLE_UNITY})
# TODO(CK): why is this needed? # TODO(CK): why is this used? This overrides the CMAKE_DEBUG_POSTFIX!
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME Greeter) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME Greeter)
target_link_libraries(${PROJECT_NAME} Greeter::Greeter cxxopts::cxxopts) # --- Test it ---
enable_testing()
add_test(NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME} --help)
# --- Install it ---
install(TARGETS ${PROJECT_NAME} RUNTIME)
include(CPack)

View file

@ -0,0 +1,106 @@
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"configurePresets": [
{
"name": "default",
"displayName": "Default standalone Config",
"description": "Default build using Ninja generator",
"generator": "Ninja",
"binaryDir": "${sourceParentDir}/build/standalone",
"installDir": "${sourceParentDir}/stagedir",
"cacheVariables": {
"CMAKE_PREFIX_PATH": {
"type": "path",
"value": "${sourceParentDir}/stagedir"
},
"CMAKE_CXX_STANDARD": "20",
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_DEBUG_POSTFIX": "D",
"CPM_USE_LOCAL_PACKAGES": "YES",
"BUILD_SHARED_LIBS": "YES"
},
"environment": {
"CPM_USE_LOCAL_PACKAGES": "YES",
"PATH": "$env{HOME}/.local/bin${pathListSep}$penv{PATH}"
}
},
{
"name": "ninja-multi",
"inherits": "default",
"displayName": "Ninja Multi-Config",
"description": "Default build using Ninja Multi-Config generator",
"generator": "Ninja Multi-Config"
},
{
"name": "windows-only",
"inherits": "default",
"displayName": "Windows-only configuration",
"description": "This build is only available on Windows",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
}
],
"buildPresets": [
{
"name": "default",
"configurePreset": "default"
},
{
"name": "install",
"configurePreset": "default",
"targets": ["install"]
}
],
"testPresets": [
{
"name": "default",
"configurePreset": "default",
"output": {"outputOnFailure": true},
"execution": {"noTestsAction": "error", "stopOnFailure": true}
}
],
"packagePresets": [
{
"name": "default",
"configurePreset": "default",
"generators": [
"TGZ"
]
}
],
"workflowPresets": [
{
"name": "default",
"steps": [
{
"type": "configure",
"name": "default"
},
{
"type": "build",
"name": "default"
},
{
"type": "test",
"name": "default"
},
{
"type": "build",
"name": "install"
},
{
"type": "package",
"name": "default"
}
]
}
]
}

View file

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.14...3.27) cmake_minimum_required(VERSION 3.21...3.27)
project(GreeterTests LANGUAGES CXX) project(GreeterTests LANGUAGES CXX)

94
test/CMakePresets.json Normal file
View file

@ -0,0 +1,94 @@
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"configurePresets": [
{
"name": "default",
"displayName": "Default develop test Config",
"description": "Default build using Ninja generator",
"generator": "Ninja",
"binaryDir": "${sourceParentDir}/build/test",
"installDir": "${sourceParentDir}/stagedir",
"cacheVariables": {
"CMAKE_PREFIX_PATH": {
"type": "path",
"value": "${sourceParentDir}/stagedir"
},
"CMAKE_CXX_STANDARD": "20",
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_DEBUG_POSTFIX": "D",
"CPM_USE_LOCAL_PACKAGES": "NO",
"BUILD_SHARED_LIBS": "YES",
"TEST_INSTALLED_VERSION": "YES"
},
"environment": {
"CPM_USE_LOCAL_PACKAGES": "YES",
"PATH": "$env{HOME}/.local/bin${pathListSep}$penv{PATH}"
}
},
{
"name": "ninja-multi",
"inherits": "default",
"displayName": "Ninja Multi-Config",
"description": "Default build using Ninja Multi-Config generator",
"generator": "Ninja Multi-Config"
},
{
"name": "windows-only",
"inherits": "default",
"displayName": "Windows-only configuration",
"description": "This build is only available on Windows",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
}
],
"buildPresets": [
{
"name": "default",
"configurePreset": "default"
}
],
"testPresets": [
{
"name": "default",
"configurePreset": "default",
"output": {"outputOnFailure": true},
"execution": {"noTestsAction": "error", "stopOnFailure": true}
}
],
"packagePresets": [
{
"name": "default",
"configurePreset": "default",
"generators": [
"TGZ"
]
}
],
"workflowPresets": [
{
"name": "default",
"steps": [
{
"type": "configure",
"name": "default"
},
{
"type": "build",
"name": "default"
},
{
"type": "test",
"name": "default"
}
]
}
]
}