mirror of
				https://github.com/TheLartians/ModernCppStarter.git
				synced 2025-10-31 10:11:34 +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
				
			
		|  | @ -1,7 +1,16 @@ | |||
| cmake_minimum_required(VERSION 3.14...3.27) | ||||
| cmake_minimum_required(VERSION 3.21...3.27) | ||||
| 
 | ||||
| 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 ---- | ||||
| 
 | ||||
| include(../cmake/tools.cmake) | ||||
|  | @ -13,6 +22,7 @@ include(../cmake/CPM.cmake) | |||
| CPMAddPackage( | ||||
|   GITHUB_REPOSITORY jarro2783/cxxopts | ||||
|   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" | ||||
| ) | ||||
| 
 | ||||
|  | @ -27,8 +37,22 @@ CPMAddPackage( | |||
| file(GLOB sources CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp) | ||||
| 
 | ||||
| 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) | ||||
| 
 | ||||
| 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" | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   ] | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue