mirror of
				https://github.com/TheLartians/ModernCppStarter.git
				synced 2025-10-31 02:01:33 +01:00 
			
		
		
		
	respect most review comments
no default cxx language settings install fmt link against fmt::fmt export dependency too if not needed ...
This commit is contained in:
		
							parent
							
								
									eedcb6f24e
								
							
						
					
					
						commit
						55fe93a2c3
					
				
					 5 changed files with 29 additions and 41 deletions
				
			
		|  | @ -18,14 +18,6 @@ if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) | ||||||
|   ) |   ) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| # ---- Project settings ---- |  | ||||||
| 
 |  | ||||||
| if(NOT DEFINED CMAKE_CXX_STANDARD) |  | ||||||
|   set(CMAKE_CXX_STANDARD 17) |  | ||||||
|   set(CMAKE_CXX_STANDARD_REQUIRED ON) |  | ||||||
|   set(CMAKE_CXX_EXTENSIONS NO) |  | ||||||
| endif() |  | ||||||
| 
 |  | ||||||
| # ---- 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 | ||||||
| 
 | 
 | ||||||
|  | @ -61,17 +53,17 @@ file(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/source/ | ||||||
| # target! EITHER: add_library(Greeter INTERFACE) OR: | # target! EITHER: add_library(Greeter INTERFACE) OR: | ||||||
| add_library(Greeter ${headers} ${sources}) | add_library(Greeter ${headers} ${sources}) | ||||||
| 
 | 
 | ||||||
| set_target_properties(Greeter PROPERTIES CXX_STANDARD ${CMAKE_CXX_STANDARD}) | # EITHER: set_target_properties(Greeter PROPERTIES CXX_STANDARD ${CMAKE_CXX_STANDARD}) # OR | ||||||
| # OR target_compile_features(Greeter PUBLIC cxx_std_17) | target_compile_features(Greeter PUBLIC cxx_std_17) | ||||||
| 
 | 
 | ||||||
| # being a cross-platform target, we enforce standards conformance on MSVC | # being a cross-platform target, we enforce standards conformance on MSVC | ||||||
| if(MSVC) | if(MSVC) | ||||||
|   target_compile_options(Greeter PUBLIC /permissive) |   target_compile_options(Greeter PUBLIC /permissive) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| # Link dependencies (if required) | # Link dependencies EITHER: target_link_libraries(Greeter PRIVATE | ||||||
| target_link_libraries(Greeter PRIVATE $<BUILD_INTERFACE:fmt::fmt-header-only>) | # $<BUILD_INTERFACE:fmt::fmt-header-only>) # OR: | ||||||
| # XXX target_link_libraries(Greeter PUBLIC fmt::fmt) | target_link_libraries(Greeter PUBLIC fmt::fmt) | ||||||
| 
 | 
 | ||||||
| target_include_directories( | target_include_directories( | ||||||
|   Greeter PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> |   Greeter PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> | ||||||
|  | @ -93,6 +85,7 @@ packageProject( | ||||||
|   INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include |   INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include | ||||||
|   INCLUDE_DESTINATION include/${PROJECT_NAME}-${PROJECT_VERSION} |   INCLUDE_DESTINATION include/${PROJECT_NAME}-${PROJECT_VERSION} | ||||||
|   VERSION_HEADER "${VERSION_HEADER_LOCATION}" |   VERSION_HEADER "${VERSION_HEADER_LOCATION}" | ||||||
|   # TODO COMPATIBILITY SameMajorVersion |   COMPATIBILITY ExactVersion | ||||||
|  |   # TBD COMPATIBILITY SameMajorVersion | ||||||
|   DEPENDENCIES "fmt 7.1.3" |   DEPENDENCIES "fmt 7.1.3" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -26,9 +26,6 @@ namespace greeter { | ||||||
|      * @return a string containing the greeting |      * @return a string containing the greeting | ||||||
|      */ |      */ | ||||||
|     std::string greet(LanguageCode lang = LanguageCode::EN) const; |     std::string greet(LanguageCode lang = LanguageCode::EN) const; | ||||||
| 
 |  | ||||||
|     /// @brief Return an iso date string
 |  | ||||||
|     std::string getIsoDate() const; |  | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
| }  // namespace greeter
 | }  // namespace greeter
 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| #include <fmt/chrono.h> | #include <fmt/format.h> | ||||||
| #include <greeter/greeter.h> | #include <greeter/greeter.h> | ||||||
| 
 | 
 | ||||||
| using namespace greeter; | using namespace greeter; | ||||||
|  | @ -9,17 +9,12 @@ std::string Greeter::greet(LanguageCode lang) const { | ||||||
|   switch (lang) { |   switch (lang) { | ||||||
|     default: |     default: | ||||||
|     case LanguageCode::EN: |     case LanguageCode::EN: | ||||||
|       return "Hello, " + name + "!"; |       return fmt::format("Hello, {}!", name); | ||||||
|     case LanguageCode::DE: |     case LanguageCode::DE: | ||||||
|       return "Hallo " + name + "!"; |       return fmt::format("Hallo {}!", name); | ||||||
|     case LanguageCode::ES: |     case LanguageCode::ES: | ||||||
|       return "¡Hola " + name + "!"; |       return fmt::format("¡Hola {}!", name); | ||||||
|     case LanguageCode::FR: |     case LanguageCode::FR: | ||||||
|       return "Bonjour " + name + "!"; |       return fmt::format("Bonjour {}!", name); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 |  | ||||||
| std::string Greeter::getIsoDate() const { |  | ||||||
|   using namespace std::literals::chrono_literals; |  | ||||||
|   return fmt::format("{:%H:%M:%S}", 3h + 15min + 30s); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  | @ -6,15 +6,20 @@ | ||||||
| #include <string> | #include <string> | ||||||
| #include <unordered_map> | #include <unordered_map> | ||||||
| 
 | 
 | ||||||
| const std::unordered_map<std::string, greeter::LanguageCode> languages{ | // NOLINTNEXTLINE(modernize-use-trailing-return-type)
 | ||||||
|  | int main(int argc, char** argv) { | ||||||
|  |   // prevent warning: initialization of 'languages' with static storage duration may throw an
 | ||||||
|  |   // exception that cannot be caught [cert-err58-cpp]
 | ||||||
|  |   const std::unordered_map<std::string, greeter::LanguageCode> languages{ | ||||||
|       {"en", greeter::LanguageCode::EN}, |       {"en", greeter::LanguageCode::EN}, | ||||||
|       {"de", greeter::LanguageCode::DE}, |       {"de", greeter::LanguageCode::DE}, | ||||||
|       {"es", greeter::LanguageCode::ES}, |       {"es", greeter::LanguageCode::ES}, | ||||||
|       {"fr", greeter::LanguageCode::FR}, |       {"fr", greeter::LanguageCode::FR}, | ||||||
| }; |   }; | ||||||
| 
 | 
 | ||||||
| int main(int argc, char** argv) { |   // prevent warning: do not use pointer arithmetic
 | ||||||
|   cxxopts::Options options(argv[0], "A program to welcome the world!"); |   // [cppcoreguidelines-pro-bounds-pointer-arithmetic]
 | ||||||
|  |   cxxopts::Options options(*argv, "A program to welcome the world!"); | ||||||
| 
 | 
 | ||||||
|   std::string language; |   std::string language; | ||||||
|   std::string name; |   std::string name; | ||||||
|  | @ -33,7 +38,10 @@ int main(int argc, char** argv) { | ||||||
|   if (result["help"].as<bool>()) { |   if (result["help"].as<bool>()) { | ||||||
|     std::cout << options.help() << std::endl; |     std::cout << options.help() << std::endl; | ||||||
|     return 0; |     return 0; | ||||||
|   } else if (result["version"].as<bool>()) { |   } | ||||||
|  | 
 | ||||||
|  |   // prevent warning: do not use 'else' after 'return' [readability-else-after-return]
 | ||||||
|  |   if (result["version"].as<bool>()) { | ||||||
|     std::cout << "Greeter, version " << GREETER_VERSION << std::endl; |     std::cout << "Greeter, version " << GREETER_VERSION << std::endl; | ||||||
|     return 0; |     return 0; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -24,8 +24,3 @@ TEST_CASE("Greeter version") { | ||||||
|   CHECK(std::string(GREETER_VERSION) == std::string("1.0")); |   CHECK(std::string(GREETER_VERSION) == std::string("1.0")); | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 |  | ||||||
| TEST_CASE("Greeter date") { |  | ||||||
|   const greeter::Greeter greeter("Tests"); |  | ||||||
|   CHECK(greeter.getIsoDate() == std::string("03:15:30")); |  | ||||||
| } |  | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue