mirror of
				https://github.com/TheLartians/ModernCppStarter.git
				synced 2025-10-31 02:01:33 +01: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:
		
							parent
							
								
									fcbedfe9d8
								
							
						
					
					
						commit
						d81a42450c
					
				
					 22 changed files with 540 additions and 31 deletions
				
			
		|  | @ -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
									
								
							
							
						
						
									
										14
									
								
								.envrc
									
										
									
									
									
										Normal 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 | ||||||
							
								
								
									
										7
									
								
								.github/workflows/install.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/install.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -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 | ||||||
|  |  | ||||||
							
								
								
									
										7
									
								
								.github/workflows/macos.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/macos.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -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 | ||||||
|  |  | ||||||
							
								
								
									
										7
									
								
								.github/workflows/standalone.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/standalone.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -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 | ||||||
|  |  | ||||||
							
								
								
									
										7
									
								
								.github/workflows/style.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/style.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -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 | ||||||
|  |  | ||||||
							
								
								
									
										7
									
								
								.github/workflows/ubuntu.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/ubuntu.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -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 | ||||||
|  |  | ||||||
							
								
								
									
										7
									
								
								.github/workflows/windows.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/windows.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -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 | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -1,4 +1,7 @@ | ||||||
|  | *~ | ||||||
|  | *.swp | ||||||
| /build* | /build* | ||||||
|  | /stagedir | ||||||
| /.vscode | /.vscode | ||||||
| /cpm_modules | /cpm_modules | ||||||
| .DS_Store | .DS_Store | ||||||
|  | @ -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
									
								
							
							
						
						
									
										97
									
								
								CMakePresets.json
									
										
									
									
									
										Normal 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" | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  | @ -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 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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
									
								
							
							
						
						
									
										103
									
								
								all/CMakePresets.json
									
										
									
									
									
										Normal 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" | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  | @ -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) | ||||||
|  |  | ||||||
|  | @ -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
									
								
							
							
						
						
									
										19
									
								
								gcovr.cfg
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										18
									
								
								requirements.txt
									
										
									
									
									
										Normal 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 | ||||||
|  | @ -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) | ||||||
|  |  | ||||||
							
								
								
									
										106
									
								
								standalone/CMakePresets.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								standalone/CMakePresets.json
									
										
									
									
									
										Normal 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" | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  | @ -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
									
								
							
							
						
						
									
										94
									
								
								test/CMakePresets.json
									
										
									
									
									
										Normal 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" | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue