mirror of
				https://github.com/TheLartians/ModernCppStarter.git
				synced 2025-10-31 02:01:33 +01:00 
			
		
		
		
	add Q&A section to readme
This commit is contained in:
		
							parent
							
								
									3507aa0a21
								
							
						
					
					
						commit
						c2d7dff1a8
					
				
					 2 changed files with 29 additions and 9 deletions
				
			
		|  | @ -21,9 +21,8 @@ FILE(GLOB_RECURSE headers "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") | ||||||
| FILE(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") | FILE(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") | ||||||
| 
 | 
 | ||||||
| # ---- Add dependencies via CPM (if required) ---- | # ---- Add dependencies via CPM (if required) ---- | ||||||
| 
 |  | ||||||
| # Example: cxxopts |  | ||||||
| # 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) | ||||||
| 
 | 
 | ||||||
| # CPMAddPackage( | # CPMAddPackage( | ||||||
|  |  | ||||||
							
								
								
									
										35
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										35
									
								
								README.md
									
										
									
									
									
								
							|  | @ -3,18 +3,21 @@ | ||||||
| [](https://github.com/TheLartians/Greeter/actions) | [](https://github.com/TheLartians/Greeter/actions) | ||||||
| [](https://github.com/TheLartians/Greeter/actions) | [](https://github.com/TheLartians/Greeter/actions) | ||||||
| 
 | 
 | ||||||
| # CMakeStarter | # ModernCPPStarter | ||||||
| 
 | 
 | ||||||
| A template for modern C++ libraries and projects. | A template for starting modern C++ libraries and projects. | ||||||
|  | Setting up a new C++ project usually requires a significant amount of preparation and boilerplate code. | ||||||
|  | Even more so for modern C++ projects with tests and contiguous integration. | ||||||
|  | This template is a collection from learnings of previous projects and should allow quick setting up new modern C++ projects. | ||||||
| 
 | 
 | ||||||
| ## Features | ## Features | ||||||
| 
 | 
 | ||||||
| - Modern CMake practices | - Modern CMake practices | ||||||
| - Suited for single header libraries and larger projects | - Suited for single header libraries and larger projects | ||||||
| - Integrated test suite | - Integrated test suite | ||||||
| - Preconfigured for continuous integration with multiplatform tests via GitHub Workflows | - Continuous integration via GitHub Workflows | ||||||
| - Code formatting enforced via [clang-format](https://clang.llvm.org/docs/ClangFormat.html)/[Format.cmake](https://github.com/TheLartians/Format.cmake) | - Code formatting enforced via [clang-format](https://clang.llvm.org/docs/ClangFormat.html) / [Format.cmake](https://github.com/TheLartians/Format.cmake) | ||||||
| - Reliable dependency management that works everywhere via [CPM.cmake](https://github.com/TheLartians/CPM.cmake) | - Reproducible dependency management via [CPM.cmake](https://github.com/TheLartians/CPM.cmake) | ||||||
| 
 | 
 | ||||||
| ## Usage | ## Usage | ||||||
| 
 | 
 | ||||||
|  | @ -23,7 +26,7 @@ A template for modern C++ libraries and projects. | ||||||
| - Clone this repo and replace all occurrences of "Greeter" in the [CMakeLists.txt](CMakeLists.txt) with the name of your project | - Clone this repo and replace all occurrences of "Greeter" in the [CMakeLists.txt](CMakeLists.txt) with the name of your project | ||||||
| - Replace the source files with your own | - Replace the source files with your own | ||||||
| - For single-header libraries: see the comments in [CMakeLists.txt](CMakeLists.txt) | - For single-header libraries: see the comments in [CMakeLists.txt](CMakeLists.txt) | ||||||
| - Have fun! | - Happy coding! | ||||||
| 
 | 
 | ||||||
| ### Build and run test suite | ### Build and run test suite | ||||||
| 
 | 
 | ||||||
|  | @ -51,7 +54,25 @@ cmake --build build --target fix-format | ||||||
| 
 | 
 | ||||||
| See [Format.cmake](https://github.com/TheLartians/Format.cmake) for more options. | See [Format.cmake](https://github.com/TheLartians/Format.cmake) for more options. | ||||||
| 
 | 
 | ||||||
|  | ## FAQ | ||||||
|  | 
 | ||||||
|  |   - Can I use this for header-only libraries? | ||||||
|  | 
 | ||||||
|  |     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? | ||||||
|  | 
 | ||||||
|  |     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. | ||||||
|  |     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? | ||||||
|  | 
 | ||||||
|  |     CPM should be mostly invisible for your library users as it's self-contained and dependency free. | ||||||
|  |     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. | ||||||
|  |     This approach should be compatible with any common C++ package manager without any user intervention, however at the cost of reproducible builds. | ||||||
|  | 
 | ||||||
| ## Coming soon | ## Coming soon | ||||||
| 
 | 
 | ||||||
| - Code coverage | - Code coverage | ||||||
| 
 | - Script to automatically update project-specific settings | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue