Add CONFIGURE_DEPENDS flag to globs and cleanup (#5)
* join comments * join target properties * add empty lines * update readme * add CONFIGURE_DEPENDS to glob sources * update comment about glob * update comment about removing unused files * update glob comment in the main CMakeLists
This commit is contained in:
		
							parent
							
								
									24aa8560db
								
							
						
					
					
						commit
						23abf01c55
					
				
					 4 changed files with 25 additions and 20 deletions
				
			
		|  | @ -16,10 +16,10 @@ endif() | ||||||
| 
 | 
 | ||||||
| # ---- Add source files ---- | # ---- Add source files ---- | ||||||
| 
 | 
 | ||||||
| # Note: globbing sources is considered bad practice as CMake won't detect new files automatically. | # Note: globbing sources is considered bad practice as CMake's generators may not detect new files automatically. | ||||||
| # Remember to always invoke cmake after changing files, or explicitly mention them here. | # Keep that in mind when changing files, or explicitly mention them here. | ||||||
| FILE(GLOB_RECURSE headers "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") | FILE(GLOB_RECURSE headers CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") | ||||||
| FILE(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") | FILE(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") | ||||||
| 
 | 
 | ||||||
| # ---- 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 | ||||||
|  | @ -35,12 +35,11 @@ CPMAddPackage( | ||||||
| 
 | 
 | ||||||
| # ---- Create library ---- | # ---- Create library ---- | ||||||
| 
 | 
 | ||||||
| # Note: | # Note: for single header libraries create an interface target instead: | ||||||
| # for single header libraries use `add_library(Greeter INTERFACE)` instead  | # add_library(Greeter INTERFACE)   | ||||||
| add_library(Greeter ${headers} ${sources}) |  | ||||||
| 
 |  | ||||||
| # Note: for single header libraries use the following instead: |  | ||||||
| # set_target_properties(Greeter PROPERTIES INTERFACE_COMPILE_FEATURES cxx_std_17) | # set_target_properties(Greeter PROPERTIES INTERFACE_COMPILE_FEATURES cxx_std_17) | ||||||
|  | 
 | ||||||
|  | add_library(Greeter ${headers} ${sources}) | ||||||
| set_target_properties(Greeter PROPERTIES CXX_STANDARD 17) | set_target_properties(Greeter PROPERTIES CXX_STANDARD 17) | ||||||
| 
 | 
 | ||||||
| # Link dependencies (if required) | # Link dependencies (if required) | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								README.md
									
										
									
									
									
								
							|  | @ -32,7 +32,7 @@ This template is the result of learnings from many previous projects and should | ||||||
| - Add your project's codecov token to your project's github secrets under `CODECOV_TOKEN` | - Add your project's codecov token to your project's github secrets under `CODECOV_TOKEN` | ||||||
| - Happy coding! | - Happy coding! | ||||||
| 
 | 
 | ||||||
| Remember to eventually remove any unused files, such as the standalone directory or irrelevant tests for your project. | Eventually, you can remove any unused files, such as the standalone directory or irrelevant github workflows for your project. | ||||||
| 
 | 
 | ||||||
| ### Build and run the standalone target | ### Build and run the standalone target | ||||||
| 
 | 
 | ||||||
|  | @ -81,18 +81,18 @@ See [Format.cmake](https://github.com/TheLartians/Format.cmake) for more options | ||||||
| 
 | 
 | ||||||
|     Yes, however you will need to change the library type to an `INTERFACE` library as documented in the [CMakeLists.txt](CMakeLists.txt). |     Yes, however you will need to change the library type to an `INTERFACE` library as documented in the [CMakeLists.txt](CMakeLists.txt). | ||||||
| 
 | 
 | ||||||
|   - You are using `GLOB` to add source files in CMakeLists.txt. Isn't that evil? |   - I see you are using `GLOB` to add source files in CMakeLists.txt. Isn't that evil? | ||||||
| 
 | 
 | ||||||
|     Glob is considered bad because changes to source files won't be automatically caught by CMakes builders and you will need remember to invoke CMake on any changes. |     Glob is considered bad because any changes to the source file structure [might not be automatically caught](https://cmake.org/cmake/help/latest/command/file.html#filesystem) by CMake's builders and you will need to manually invoke CMake on changes. | ||||||
|     I personally prefer the `GLOB` solution for its simplicity, but feel free to change it to explicitly listing sources. |     I personally prefer the `GLOB` solution for its simplicity, but feel free to change it to explicitly listing sources. | ||||||
| 
 | 
 | ||||||
|   - I'm adding external dependencies to my project using CPM. Will this force users to use CPM as well? |   - I'm adding external dependencies to my project using CPM. Will this force users to use CPM as well? | ||||||
| 
 | 
 | ||||||
|     CPM should be mostly invisible for your library users as it's self-contained and dependency free. |     CPM.cmake should be invisible for your library users as it's a self-contained CMake Script. | ||||||
|     If problems do arise, they can always opt-out by defining `CPM_USE_LOCAL_PACKAGES`, which will override all calls to `CPMAddPackage` with `find_package`. |     If problems do arise, they can always opt-out by defining `CPM_USE_LOCAL_PACKAGES`, which will override all calls to `CPMAddPackage` with `find_package`. | ||||||
|     If you are using `CPMFindPackage` instead of `CPMAddPackage`, CPM will always try to use `find_package` to add packages. |     If you concerned about this, you should prefer using `CPMFindPackage` instead of `CPMAddPackage`, as then CPM will try to use `find_package` to add packages whenever possible. | ||||||
|     This approach should be compatible with any common C++ package manager without any user intervention, however at the cost of reproducible builds. |     `CPMFindPackage` approach should also be compatible with any common C++ package manager without modifications, however at the cost of reproducible builds. | ||||||
|     For more info, see the [CPM.cmake documentation](https://github.com/TheLartians/CPM.cmake). |     For more information, see the [CPM.cmake documentation](https://github.com/TheLartians/CPM.cmake). | ||||||
| 
 | 
 | ||||||
|   - Can I configure and build my project offline? |   - Can I configure and build my project offline? | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -24,8 +24,14 @@ CPMAddPackage( | ||||||
| 
 | 
 | ||||||
| # ---- Create standalone executable ---- | # ---- Create standalone executable ---- | ||||||
| 
 | 
 | ||||||
| file(GLOB sources ${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp) | file(GLOB sources CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp) | ||||||
|  | 
 | ||||||
| add_executable(GreeterStandalone ${sources}) | add_executable(GreeterStandalone ${sources}) | ||||||
| set_target_properties(GreeterStandalone PROPERTIES CXX_STANDARD 17 COMPILE_FLAGS "-Wall -pedantic -Wextra") | 
 | ||||||
| set_target_properties(GreeterStandalone PROPERTIES OUTPUT_NAME "Greeter") | set_target_properties(GreeterStandalone PROPERTIES  | ||||||
|  |   CXX_STANDARD 17  | ||||||
|  |   COMPILE_FLAGS "-Wall -pedantic -Wextra" | ||||||
|  |   OUTPUT_NAME "Greeter" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
| target_link_libraries(GreeterStandalone Greeter cxxopts) | target_link_libraries(GreeterStandalone Greeter cxxopts) | ||||||
|  |  | ||||||
|  | @ -37,7 +37,7 @@ CPMAddPackage( | ||||||
| 
 | 
 | ||||||
| # ---- Create binary ---- | # ---- Create binary ---- | ||||||
| 
 | 
 | ||||||
| file(GLOB sources ${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp) | file(GLOB sources CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp) | ||||||
| add_executable(GreeterTests ${sources}) | add_executable(GreeterTests ${sources}) | ||||||
| target_link_libraries(GreeterTests doctest Greeter) | target_link_libraries(GreeterTests doctest Greeter) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue