- Refactored the cmake files to match more the common style - Merged 'include', 'src' and 'test' directories (it is better to have all files in one place)master
| @@ -1,29 +1,31 @@ | |||||
| # Initialize CMake ################################################################################ | # Initialize CMake ################################################################################ | ||||
| CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) | |||||
| CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) | |||||
| # Set CMAKE_BUILD_TYPE | |||||
| If ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) | |||||
| EndIf ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) | |||||
| Project ( TestProject ) | |||||
| # Set CMAKE_MODULE_PATH | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} | |||||
| "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| EndIf ( ) | |||||
| # CMAKE_BUILD_TYPE | |||||
| If ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) | |||||
| EndIf ( ) | |||||
| Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} | |||||
| "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| EndIf ( ) | |||||
| # CMAKE_MODULE_PATH | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| EndIf ( ) | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| EndIf ( ) | |||||
| # Includes | # Includes | ||||
| Include ( CTest ) | |||||
| Include ( GNUInstallDirs ) | |||||
| Include ( CTest ) | |||||
| Include ( GNUInstallDirs ) | |||||
| # Projects ######################################################################################## | # Projects ######################################################################################## | ||||
| Message ( WARNING "Please configure the subprojects of this project group!" ) | |||||
| # Find_Package ( <package> ) | |||||
| Message ( FATAL_ERROR "Please configure the subprojects of this project group!" ) | |||||
| Find_Package ( helloworld REQUIRED ) | |||||
| Find_Package ( libhelloworld REQUIRED ) | |||||
| Find_Package ( libinterface REQUIRED ) | |||||
| @@ -1 +1,57 @@ | |||||
| TODO: write a docu :) | |||||
| # New Group | |||||
| Create a new project group | |||||
| ```console | |||||
| $ tool \ | |||||
| --verbose \ | |||||
| --modules <cmake-modules-git-repository> \ | |||||
| --group <directory-to-init-group-at> | |||||
| ``` | |||||
| # New Executable | |||||
| Add a new executable to an existing project group | |||||
| ```console | |||||
| $ tool \ | |||||
| --verbose \ | |||||
| --modules <cmake-modules-git-repository> \ | |||||
| --executable <name> <group-directory> | |||||
| ``` | |||||
| # New Library | |||||
| Add a new library to an existing project group | |||||
| ```console | |||||
| $ tool \ | |||||
| --verbose \ | |||||
| --modules <cmake-modules-git-repository> \ | |||||
| --library <name> <group-directory> | |||||
| ``` | |||||
| # New Interface Library | |||||
| Add a new interface library to an existing project group | |||||
| ```console | |||||
| $ tool \ | |||||
| --verbose \ | |||||
| --modules <cmake-modules-git-repository> \ | |||||
| --interface <name> <group-directory> | |||||
| ``` | |||||
| # All in One | |||||
| You can generate all in one by specifying multiple project or group arguments | |||||
| ```console | |||||
| $ tool \ | |||||
| --verbose \ | |||||
| --modules <cmake-modules-git-repository> \ | |||||
| --group /tmp/fuu \ | |||||
| --executable myexe /tmp/fuu \ | |||||
| --library mylib /tmp/fuu \ | |||||
| --interface myintf /tmp/fuu | |||||
| ``` | |||||
| @@ -0,0 +1,6 @@ | |||||
| Include ( ${CMAKE_CURRENT_LIST_DIR}/modules/cmake/find_local_module.cmake ) | |||||
| FindLocalModule ( helloworld ${CMAKE_CURRENT_LIST_DIR}/../projects/helloworld ) | |||||
| If ( NOT TARGET helloworld::helloworld-objects ) | |||||
| Add_Library ( helloworld::helloworld-objects ALIAS helloworld-objects ) | |||||
| EndIf ( ) | |||||
| @@ -0,0 +1,10 @@ | |||||
| Include ( ${CMAKE_CURRENT_LIST_DIR}/modules/cmake/find_local_module.cmake ) | |||||
| FindLocalModule ( libhelloworld ${CMAKE_CURRENT_LIST_DIR}/../projects/libhelloworld ) | |||||
| If ( NOT TARGET libhelloworld::libhelloworld-static ) | |||||
| Add_Library ( libhelloworld::libhelloworld-static ALIAS libhelloworld-static ) | |||||
| EndIf ( ) | |||||
| If ( NOT TARGET libhelloworld::libhelloworld-shared ) | |||||
| Add_Library ( libhelloworld::libhelloworld-shared ALIAS libhelloworld-shared ) | |||||
| EndIf ( ) | |||||
| @@ -0,0 +1,6 @@ | |||||
| Include ( ${CMAKE_CURRENT_LIST_DIR}/modules/cmake/find_local_module.cmake ) | |||||
| FindLocalModule ( libinterface ${CMAKE_CURRENT_LIST_DIR}/../projects/libinterface ) | |||||
| If ( NOT TARGET libinterface::libinterface ) | |||||
| Add_Library ( libinterface::libinterface ALIAS libinterface ) | |||||
| EndIf ( ) | |||||
| @@ -1 +1 @@ | |||||
| Subproject commit 94b9877d65e46c9d8169ebc46f163d02e4d9dcf3 | |||||
| Subproject commit f1ff5b9d65609f2a9e09b9dd3f3e18aac69e02c8 | |||||
| @@ -1,34 +1,176 @@ | |||||
| # Initialize CMake ################################################################################ | # Initialize CMake ################################################################################ | ||||
| CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) | |||||
| # Set CMAKE_BUILD_TYPE | |||||
| If ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) | |||||
| EndIf ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) | |||||
| # Set CMAKE_MODULE_PATH | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} | |||||
| "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| EndIf ( ) | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} | |||||
| "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| EndIf ( ) | |||||
| CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) | |||||
| # CMAKE_BUILD_TYPE | |||||
| If ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) | |||||
| EndIf ( ) | |||||
| Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) | |||||
| # CMAKE_MODULE_PATH | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| EndIf ( ) | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| EndIf ( ) | |||||
| # Project ######################################################################################### | # Project ######################################################################################### | ||||
| Include ( GNUInstallDirs ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-options.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-const.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-var.cmake ) | |||||
| Project ( ${HELLOWORLD_PROJECT_NAME} | |||||
| DESCRIPTION "${HELLOWORLD_PROJECT_DESCRIPTION}" | |||||
| VERSION "${HELLOWORLD_VERSION}" ) | |||||
| Include ( CTest ) | |||||
| # Subdirectories | |||||
| Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) | |||||
| Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) | |||||
| Include ( GNUInstallDirs ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-options.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-const.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-var.cmake ) | |||||
| Project ( ${HELLOWORLD_PROJECT_NAME} | |||||
| DESCRIPTION "${HELLOWORLD_PROJECT_DESCRIPTION}" | |||||
| VERSION "${HELLOWORLD_VERSION}" ) | |||||
| Include ( CTest ) | |||||
| # Initialize ###################################################################################### | |||||
| Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) | |||||
| Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) | |||||
| Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) | |||||
| Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) | |||||
| Find_Package ( GTest QUIET ) | |||||
| Find_Package ( Sanitizers QUIET ) | |||||
| Message ( FATAL_ERROR "Please configure the dependencies of this project!" ) | |||||
| Find_Package ( libhelloworld REQUIRED ${HELLOWORLD_FIND_PACKAGE_EXTRA_ARGS} ) | |||||
| # Object Library ################################################################################## | |||||
| Set ( HELLOWORLD_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src" ) | |||||
| Set ( HELLOWORLD_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src" ) | |||||
| Set ( HELLOWORLD_MAIN_FILE "${HELLOWORLD_SOURCE_DIR}/main.cpp" ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_HEADER_FILES "${HELLOWORLD_INCLUDE_DIR}/*.h" ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_INLINE_FILES "${HELLOWORLD_INCLUDE_DIR}/*.inl" ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_SOURCE_FILES "${HELLOWORLD_SOURCE_DIR}/*.cpp" ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_TEST_HEADER_FILES "${HELLOWORLD_INCLUDE_DIR}/*.test.h" ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_TEST_INLINE_FILES "${HELLOWORLD_INCLUDE_DIR}/*.test.inl" ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_TEST_SOURCE_FILES "${HELLOWORLD_SOURCE_DIR}/*.test.cpp" ) | |||||
| ForEach ( TEST_FILE IN LISTS HELLOWORLD_TEST_HEADER_FILES ) | |||||
| List ( REMOVE_ITEM HELLOWORLD_HEADER_FILES "${TEST_FILE}" ) | |||||
| EndForEach ( ) | |||||
| ForEach ( TEST_FILE IN LISTS HELLOWORLD_TEST_INLINE_FILES ) | |||||
| List ( REMOVE_ITEM HELLOWORLD_INLINE_FILES "${TEST_FILE}" ) | |||||
| EndForEach ( ) | |||||
| List ( REMOVE_ITEM HELLOWORLD_SOURCE_FILES "${HELLOWORLD_MAIN_FILE}" ) | |||||
| ForEach ( TEST_FILE IN LISTS HELLOWORLD_TEST_SOURCE_FILES ) | |||||
| List ( REMOVE_ITEM HELLOWORLD_SOURCE_FILES "${TEST_FILE}" ) | |||||
| EndForEach ( ) | |||||
| Add_Library ( | |||||
| helloworld-objects | |||||
| OBJECT | |||||
| ${HELLOWORLD_HEADER_FILES} | |||||
| ${HELLOWORLD_INLINE_FILES} | |||||
| ${HELLOWORLD_SOURCE_FILES} ) | |||||
| Target_Include_Directories ( | |||||
| helloworld-objects | |||||
| PUBLIC | |||||
| $<BUILD_INTERFACE:${HELLOWORLD_INCLUDE_DIR}> | |||||
| $<INSTALL_INTERFACE:${HELLOWORLD_INSTALL_DIR_INCLUDE}> ) | |||||
| Target_Link_Libraries ( | |||||
| helloworld-objects | |||||
| PUBLIC | |||||
| libhelloworld::libhelloworld-shared ) | |||||
| # Executable ###################################################################################### | |||||
| Add_Executable ( helloworld "${HELLOWORLD_MAIN_FILE}" ) | |||||
| Target_Link_Libraries ( | |||||
| helloworld | |||||
| PUBLIC | |||||
| helloworld-objects ) | |||||
| # Tests ########################################################################################### | |||||
| If ( GTest_FOUND ) | |||||
| ForEach ( FILE IN LISTS HELLOWORLD_TEST_SOURCE_FILES ) | |||||
| # Add Test | |||||
| File ( RELATIVE_PATH RELFILE "${HELLOWORLD_SOURCE_DIR}" "${FILE}" ) | |||||
| Get_Filename_Component ( TEST_DIR "${RELFILE}" DIRECTORY ) | |||||
| Get_Filename_Component ( TEST_NAME "${RELFILE}" NAME_WE ) | |||||
| Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) | |||||
| String ( REPLACE ".test" "" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| Set ( TEST_NAME "test-${TEST_NAME}" ) | |||||
| Add_Executable ( ${TEST_NAME} | |||||
| EXCLUDE_FROM_ALL | |||||
| ${HELLOWORLD_TEST_HEADER_FILES} | |||||
| ${HELLOWORLD_TEST_INLINE_FILES} | |||||
| ${FILE} ) | |||||
| Target_Link_Libraries ( ${TEST_NAME} | |||||
| PUBLIC | |||||
| helloworld-objects | |||||
| GTest::Main ) | |||||
| # Sanitizers | |||||
| If ( Sanitizers_FOUND ) | |||||
| Add_Sanitizers ( ${TEST_NAME} ) | |||||
| EndIf ( ) | |||||
| # pedantic | |||||
| If ( HAS_PEDANTIC ) | |||||
| Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) | |||||
| EndIf ( ) | |||||
| # test | |||||
| If ( HAS_CMAKE_TESTS ) | |||||
| Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} GROUP gedt ) | |||||
| Else ( ) | |||||
| Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) | |||||
| EndIf ( ) | |||||
| EndForEach ( ) | |||||
| EndIf ( ) | |||||
| # Optimization #################################################################################### | |||||
| # sanitizers | |||||
| If ( Sanitizers_FOUND ) | |||||
| Add_Sanitizers ( helloworld-objects ) | |||||
| Add_Sanitizers ( helloworld ) | |||||
| EndIf ( ) | |||||
| # pedantic | |||||
| If ( HAS_PEDANTIC ) | |||||
| Pedantic_Apply_Flags_Target ( helloworld-objects ALL ) | |||||
| Pedantic_Apply_Flags_Target ( helloworld ALL ) | |||||
| EndIf ( ) | |||||
| # cotire | |||||
| If ( HAS_COTIRE ) | |||||
| Cotire ( helloworld-objects ) | |||||
| Cotire ( helloworld ) | |||||
| EndIf ( ) | |||||
| # Install ######################################################################################### | |||||
| # Executable | |||||
| Install ( TARGETS helloworld | |||||
| DESTINATION ${HELLOWORLD_INSTALL_DIR_BIN} ) | |||||
| # Debug | |||||
| If ( HAS_STRIP_SYMBOLS AND NOT HELLOWORLD_NO_STRIP ) | |||||
| Strip_Symbols ( helloworld HELLOWORLD_DBG_FILE ) | |||||
| If ( HELLOWORLD_INSTALL_DEBUG ) | |||||
| Install ( FILES ${HELLOWORLD_DBG_FILE} | |||||
| DESTINATION ${HELLOWORLD_INSTALL_DIR_LIB} ) | |||||
| EndIf ( ) | |||||
| EndIf ( ) | |||||
| @@ -1,26 +1,27 @@ | |||||
| # This file contains constant variables that are fixed to this project | # This file contains constant variables that are fixed to this project | ||||
| # Version | # Version | ||||
| Set ( HELLOWORLD_VERSION_MAJOR 1 ) | |||||
| Set ( HELLOWORLD_VERSION_MINOR 0 ) | |||||
| Set ( HELLOWORLD_VERSION_PATCH 0 ) | |||||
| Set ( HELLOWORLD_VERSION_BUILD 0 ) | |||||
| Set ( HELLOWORLD_VERSION_HASH "" ) | |||||
| Set ( HELLOWORLD_VERSION_BEHIND 0 ) | |||||
| Set ( HELLOWORLD_VERSION_DIRTY 0 ) | |||||
| Set ( HELLOWORLD_VERSION_MAJOR 1 ) | |||||
| Set ( HELLOWORLD_VERSION_MINOR 0 ) | |||||
| Set ( HELLOWORLD_VERSION_PATCH 0 ) | |||||
| Set ( HELLOWORLD_VERSION_BUILD 0 ) | |||||
| Set ( HELLOWORLD_VERSION_BEHIND 0 ) | |||||
| Set ( HELLOWORLD_VERSION_DIRTY 0 ) | |||||
| Set ( HELLOWORLD_VERSION_HASH "notgit" ) | |||||
| Set ( HELLOWORLD_VERSION_HASH_SHORT "notgit" ) | |||||
| # Names | # Names | ||||
| Set ( HELLOWORLD_PROJECT_NAME "helloworld" ) | |||||
| Set ( HELLOWORLD_PROJECT_DESCRIPTION "A simple hello world project" ) | |||||
| Set ( HELLOWORLD_PROJECT_NAME "helloworld" ) | |||||
| Set ( HELLOWORLD_PROJECT_DESCRIPTION "A simple hello world project" ) | |||||
| # Include generated variables for further usage | # Include generated variables for further usage | ||||
| Include ( ${CMAKE_CURRENT_LIST_DIR}/helloworld-var.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_LIST_DIR}/helloworld-var.cmake ) | |||||
| # Install directories | # Install directories | ||||
| Set ( HELLOWORLD_INSTALL_DIR_BIN "${CMAKE_INSTALL_BINDIR}" ) | |||||
| Set ( HELLOWORLD_INSTALL_DIR_BIN "${CMAKE_INSTALL_BINDIR}" ) | |||||
| # C Standard | # C Standard | ||||
| Set ( CMAKE_C_STANDARD 11 ) | |||||
| Set ( CMAKE_CXX_STANDARD 17 ) | |||||
| Set ( CMAKE_C_STANDARD_REQUIRED ON ) | |||||
| Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) | |||||
| Set ( CMAKE_C_STANDARD 11 ) | |||||
| Set ( CMAKE_CXX_STANDARD 20 ) | |||||
| Set ( CMAKE_C_STANDARD_REQUIRED ON ) | |||||
| Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) | |||||
| @@ -1,11 +1,14 @@ | |||||
| # This file contains options that can be passed to the cmake command | # This file contains options that can be passed to the cmake command | ||||
| Option ( HELLOWORLD_INSTALL_DEBUG | |||||
| "Install the stripped debug informations of helloworld." | |||||
| OFF ) | |||||
| Option ( HELLOWORLD_NO_STRIP | |||||
| "Do not strip debug symbols from helloworld binary." | |||||
| OFF ) | |||||
| Option ( HELLOWORLD_USE_GIT_VERSION | |||||
| "Read the git tags to get the version of helloworld" | |||||
| ON ) | |||||
| Option ( HELLOWORLD_INSTALL_DEBUG | |||||
| "Install the stripped debug informations of helloworld." | |||||
| OFF ) | |||||
| Option ( HELLOWORLD_NO_STRIP | |||||
| "Do not strip debug symbols from helloworld binary." | |||||
| OFF ) | |||||
| Option ( HELLOWORLD_USE_GIT_VERSION | |||||
| "Read the git tags to get the version of helloworld" | |||||
| ON ) | |||||
| Option ( HELLOWORLD_IGNORE_MODULES | |||||
| "Use only config mode to find other packages" | |||||
| OFF ) | |||||
| @@ -1,32 +1,34 @@ | |||||
| # This file contains generated variables that are needed for the project | # This file contains generated variables that are needed for the project | ||||
| # Git Version | # Git Version | ||||
| If ( HELLOWORLD_USE_GIT_VERSION ) | |||||
| Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) | |||||
| If ( HAS_GIT_HELPER ) | |||||
| GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/.. | |||||
| HELLOWORLD_VERSION_MAJOR | |||||
| HELLOWORLD_VERSION_MINOR | |||||
| HELLOWORLD_VERSION_PATCH | |||||
| HELLOWORLD_VERSION_BUILD | |||||
| HELLOWORLD_VERSION_HASH | |||||
| HELLOWORLD_VERSION_BEHIND | |||||
| HELLOWORLD_VERSION_DIRTY ) | |||||
| EndIf ( ) | |||||
| EndIf ( ) | |||||
| If ( HELLOWORLD_USE_GIT_VERSION ) | |||||
| Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) | |||||
| If ( HAS_GIT_HELPER ) | |||||
| GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/../../.. | |||||
| HELLOWORLD_VERSION_MAJOR | |||||
| HELLOWORLD_VERSION_MINOR | |||||
| HELLOWORLD_VERSION_PATCH | |||||
| HELLOWORLD_VERSION_BUILD | |||||
| HELLOWORLD_VERSION_HASH | |||||
| HELLOWORLD_VERSION_BEHIND | |||||
| HELLOWORLD_VERSION_DIRTY ) | |||||
| EndIf ( ) | |||||
| EndIf ( ) | |||||
| # Strings | # Strings | ||||
| Set ( HELLOWORLD_VERSION_SHORT | |||||
| "${HELLOWORLD_VERSION_MAJOR}.${HELLOWORLD_VERSION_MINOR}" ) | |||||
| Set ( HELLOWORLD_VERSION | |||||
| "${HELLOWORLD_VERSION_SHORT}.${HELLOWORLD_VERSION_PATCH}.${HELLOWORLD_VERSION_BUILD}" ) | |||||
| Set ( HELLOWORLD_VERSION_COMPLETE | |||||
| "${HELLOWORLD_VERSION}" ) | |||||
| Set ( HELLOWORLD_NAME | |||||
| "${HELLOWORLD_PROJECT_NAME}-${HELLOWORLD_VERSION_SHORT}" ) | |||||
| Set ( HELLOWORLD_OUTPUTNAME | |||||
| "${HELLOWORLD_PROJECT_NAME}" ) | |||||
| If ( HELLOWORLD_VERSION_BEHIND ) | |||||
| Set ( HELLOWORLD_VERSION_COMPLETE | |||||
| "${HELLOWORLD_VERSION_COMPLETE}+${HELLOWORLD_VERSION_BEHIND}" ) | |||||
| EndIf ( ) | |||||
| Set ( HELLOWORLD_VERSION "${HELLOWORLD_VERSION_SHORT}.${HELLOWORLD_VERSION_PATCH}.${HELLOWORLD_VERSION_BUILD}" ) | |||||
| Set ( HELLOWORLD_VERSION_SHORT "${HELLOWORLD_VERSION_MAJOR}.${HELLOWORLD_VERSION_MINOR}" ) | |||||
| Set ( HELLOWORLD_VERSION_COMPLETE "${HELLOWORLD_VERSION}" ) | |||||
| If ( HELLOWORLD_VERSION_BEHIND ) | |||||
| Set ( HELLOWORLD_VERSION_COMPLETE "${HELLOWORLD_VERSION_COMPLETE}+${HELLOWORLD_VERSION_BEHIND}" ) | |||||
| EndIf ( ) | |||||
| Set ( HELLOWORLD_NAME "${HELLOWORLD_PROJECT_NAME}-${HELLOWORLD_VERSION_SHORT}" ) | |||||
| Set ( HELLOWORLD_OUTPUTNAME "${HELLOWORLD_PROJECT_NAME}" ) | |||||
| String ( SUBSTRING "${HELLOWORLD_VERSION_HASH}" 0 8 HELLOWORLD_VERSION_HASH_SHORT ) | |||||
| # Extra | |||||
| If ( HELLOWORLD_IGNORE_MODULES ) | |||||
| Set ( HELLOWORLD_FIND_PACKAGE_EXTRA_ARGS "CONFIG" ) | |||||
| EndIf ( ) | |||||
| @@ -1,3 +0,0 @@ | |||||
| #pragma once | |||||
| #include <helloworld/dummy.h> | |||||
| @@ -1,73 +0,0 @@ | |||||
| # Initialize ###################################################################################### | |||||
| Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) | |||||
| Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) | |||||
| Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) | |||||
| Find_Package ( Sanitizers QUIET ) | |||||
| Message ( WARNING "Please configure the dependencies of this project!" ) | |||||
| Find_Package ( libhelloworld REQUIRED ) | |||||
| # Object Library ################################################################################## | |||||
| Set ( HELLOWORLD_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_HEADER_FILES ${HELLOWORLD_INCLUDE_DIR}/*.h ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_INLINE_FILES ${HELLOWORLD_INCLUDE_DIR}/*.inl ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) | |||||
| List ( REMOVE_ITEM HELLOWORLD_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp ) | |||||
| Add_Library ( helloworld-objects | |||||
| OBJECT | |||||
| ${HELLOWORLD_HEADER_FILES} | |||||
| ${HELLOWORLD_INLINE_FILES} | |||||
| ${HELLOWORLD_SOURCE_FILES} ) | |||||
| Target_Include_Directories ( helloworld-objects | |||||
| PUBLIC | |||||
| $<BUILD_INTERFACE:${HELLOWORLD_INCLUDE_DIR}> | |||||
| $<INSTALL_INTERFACE:${HELLOWORLD_INSTALL_DIR_INCLUDE}> ) | |||||
| Target_Link_Libraries ( helloworld-objects | |||||
| PUBLIC | |||||
| libhelloworld-shared ) | |||||
| # Executable ###################################################################################### | |||||
| Set ( HELLOWORLD_MAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp ) | |||||
| Add_Executable ( helloworld ${HELLOWORLD_MAIN_FILE} ) | |||||
| Target_Link_Libraries ( helloworld | |||||
| PUBLIC | |||||
| helloworld-objects ) | |||||
| # Optimization #################################################################################### | |||||
| # sanitizers | |||||
| If ( Sanitizers_FOUND ) | |||||
| Add_Sanitizers ( helloworld-objects ) | |||||
| Add_Sanitizers ( helloworld ) | |||||
| EndIf ( ) | |||||
| # pedantic | |||||
| If ( HAS_PEDANTIC ) | |||||
| Pedantic_Apply_Flags_Target ( helloworld-objects ALL ) | |||||
| Pedantic_Apply_Flags_Target ( helloworld ALL ) | |||||
| EndIf ( ) | |||||
| # cotire | |||||
| If ( HAS_COTIRE ) | |||||
| Cotire ( helloworld-objects ) | |||||
| Cotire ( helloworld ) | |||||
| EndIf ( ) | |||||
| # Install ######################################################################################### | |||||
| # Executable | |||||
| Install ( TARGETS helloworld | |||||
| DESTINATION ${HELLOWORLD_INSTALL_DIR_BIN} ) | |||||
| # Debug | |||||
| If ( HAS_STRIP_SYMBOLS AND NOT HELLOWORLD_NO_STRIP ) | |||||
| Strip_Symbols ( helloworld HELLOWORLD_DBG_FILE ) | |||||
| If ( HELLOWORLD_INSTALL_DEBUG ) | |||||
| Install ( FILES ${HELLOWORLD_DBG_FILE} | |||||
| DESTINATION ${HELLOWORLD_INSTALL_DIR_LIB} ) | |||||
| EndIf ( ) | |||||
| EndIf ( ) | |||||
| @@ -1,6 +1,5 @@ | |||||
| #include <gtest/gtest.h> | |||||
| #include <helloworld.h> | |||||
| #include <helloworld/dummy.h> | |||||
| #include <helloworld/dummy.test.h> | |||||
| using namespace ::testing; | using namespace ::testing; | ||||
| using namespace ::helloworld; | using namespace ::helloworld; | ||||
| @@ -0,0 +1,3 @@ | |||||
| #pragma once | |||||
| #include <gtest/gtest.h> | |||||
| @@ -1,5 +1,6 @@ | |||||
| #include <iostream> | #include <iostream> | ||||
| #include <helloworld.h> | |||||
| #include <helloworld/dummy.h> | |||||
| using namespace ::helloworld; | using namespace ::helloworld; | ||||
| @@ -1,59 +0,0 @@ | |||||
| # Initialize ###################################################################################### | |||||
| Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) | |||||
| Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) | |||||
| Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) | |||||
| Find_Package ( Sanitizers QUIET ) | |||||
| # Test ############################################################################################ | |||||
| Find_Package ( GTest QUIET ) | |||||
| If ( NOT "${GTest_FOUND}" ) | |||||
| Return ( ) | |||||
| EndIf ( ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_TEST_HEADER_FILES | |||||
| ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_TEST_INLINE_FILES | |||||
| ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) | |||||
| File ( GLOB_RECURSE HELLOWORLD_TEST_SOURCE_FILES | |||||
| RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} | |||||
| ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) | |||||
| ForEach ( FILE IN LISTS HELLOWORLD_TEST_SOURCE_FILES ) | |||||
| # add test | |||||
| Get_Filename_Component ( TEST_DIR ${FILE} DIRECTORY ) | |||||
| Get_Filename_Component ( TEST_NAME ${FILE} NAME_WE ) | |||||
| Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) | |||||
| String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| Set ( TEST_NAME "test-${TEST_NAME}" ) | |||||
| Add_Executable ( ${TEST_NAME} | |||||
| EXCLUDE_FROM_ALL | |||||
| ${HELLOWORLD_TEST_HEADER_FILES} | |||||
| ${HELLOWORLD_TEST_INLINE_FILES} | |||||
| ${FILE} ) | |||||
| Target_Link_Libraries ( ${TEST_NAME} | |||||
| PUBLIC | |||||
| helloworld-objects | |||||
| GTest::Main ) | |||||
| # Sanitizers | |||||
| If ( Sanitizers_FOUND ) | |||||
| Add_Sanitizers ( ${TEST_NAME} ) | |||||
| EndIf ( ) | |||||
| # pedantic | |||||
| If ( HAS_PEDANTIC ) | |||||
| Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) | |||||
| EndIf ( ) | |||||
| # test | |||||
| If ( HAS_CMAKE_TESTS ) | |||||
| Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} GROUP helloworld ) | |||||
| Else ( ) | |||||
| Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) | |||||
| EndIf ( ) | |||||
| EndForEach ( ) | |||||
| @@ -1,63 +1,242 @@ | |||||
| # Initialize CMake ################################################################################ | # Initialize CMake ################################################################################ | ||||
| CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) | |||||
| # Set CMAKE_BUILD_TYPE | |||||
| If ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) | |||||
| EndIf ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) | |||||
| # Set CMAKE_MODULE_PATH | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} | |||||
| "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| EndIf ( ) | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} | |||||
| "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| EndIf ( ) | |||||
| CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) | |||||
| # CMAKE_BUILD_TYPE | |||||
| If ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) | |||||
| EndIf ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) | |||||
| # CMAKE_MODULE_PATH | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| EndIf ( ) | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| EndIf ( ) | |||||
| # Project ######################################################################################### | # Project ######################################################################################### | ||||
| Include ( GNUInstallDirs ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-options.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-const.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-var.cmake ) | |||||
| Project ( ${LIBHELLOWORLD_PROJECT_NAME} | |||||
| DESCRIPTION "${LIBHELLOWORLD_PROJECT_DESCRIPTION}" | |||||
| VERSION "${LIBHELLOWORLD_VERSION}" ) | |||||
| Include ( CTest ) | |||||
| # Subdirectories | |||||
| Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) | |||||
| Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) | |||||
| # Install | |||||
| If ( NOT LIBHELLOWORLD_HAS_EXPORT | |||||
| OR NOT LIBHELLOWORLD_INSTALL_PACKAGE ) | |||||
| Return ( ) | |||||
| EndIf ( ) | |||||
| Include ( CMakePackageConfigHelpers ) | |||||
| Write_Basic_Package_Version_File ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config-version.cmake" | |||||
| VERSION ${LIBHELLOWORLD_VERSION} | |||||
| COMPATIBILITY AnyNewerVersion ) | |||||
| Configure_File ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-config.cmake" | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config.cmake" | |||||
| @ONLY ) | |||||
| Set ( ConfigPackageLocation "${LIBHELLOWORLD_INSTALL_DIR_SHARE}/cmake" ) | |||||
| Install ( EXPORT | |||||
| libhelloworld | |||||
| NAMESPACE | |||||
| libhelloworld:: | |||||
| DESTINATION | |||||
| ${ConfigPackageLocation} ) | |||||
| Install ( FILES | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config.cmake" | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config-version.cmake" | |||||
| DESTINATION | |||||
| ${ConfigPackageLocation} | |||||
| COMPONENT | |||||
| Devel ) | |||||
| Include ( GNUInstallDirs ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-options.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-const.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-var.cmake ) | |||||
| Project ( ${LIBHELLOWORLD_PROJECT_NAME} | |||||
| DESCRIPTION "${LIBHELLOWORLD_PROJECT_DESCRIPTION}" | |||||
| VERSION "${LIBHELLOWORLD_VERSION}" ) | |||||
| Include ( CTest ) | |||||
| # Initialize ###################################################################################### | |||||
| Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) | |||||
| Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) | |||||
| Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) | |||||
| Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) | |||||
| Find_Package ( GTest QUIET ) | |||||
| Find_Package ( Sanitizers QUIET ) | |||||
| Message ( FATAL_ERROR "Please configure the dependencies of this project!" ) | |||||
| # Find_Package ( libhelloworld REQUIRED ${LIBHELLOWORLD_FIND_PACKAGE_EXTRA_ARGS} ) | |||||
| # Object Library ################################################################################## | |||||
| Set ( CMAKE_POSITION_INDEPENDENT_CODE ON ) | |||||
| Set ( LIBHELLOWORLD_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src" ) | |||||
| Set ( LIBHELLOWORLD_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src" ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_HEADER_FILES "${LIBHELLOWORLD_INCLUDE_DIR}/*.h" ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_INLINE_FILES "${LIBHELLOWORLD_INCLUDE_DIR}/*.inl" ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_SOURCE_FILES "${LIBHELLOWORLD_SOURCE_DIR}/*.cpp" ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_TEST_HEADER_FILES "${LIBHELLOWORLD_INCLUDE_DIR}/*.test.h" ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_TEST_INLINE_FILES "${LIBHELLOWORLD_INCLUDE_DIR}/*.test.inl" ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_TEST_SOURCE_FILES "${LIBHELLOWORLD_SOURCE_DIR}/*.test.cpp" ) | |||||
| ForEach ( TEST_FILE IN LISTS LIBHELLOWORLD_TEST_HEADER_FILES ) | |||||
| List ( REMOVE_ITEM LIBHELLOWORLD_HEADER_FILES "${TEST_FILE}" ) | |||||
| EndForEach ( ) | |||||
| ForEach ( TEST_FILE IN LISTS LIBHELLOWORLD_TEST_INLINE_FILES ) | |||||
| List ( REMOVE_ITEM LIBHELLOWORLD_INLINE_FILES "${TEST_FILE}" ) | |||||
| EndForEach ( ) | |||||
| ForEach ( TEST_FILE IN LISTS LIBHELLOWORLD_TEST_SOURCE_FILES ) | |||||
| List ( REMOVE_ITEM LIBHELLOWORLD_SOURCE_FILES "${TEST_FILE}" ) | |||||
| EndForEach ( ) | |||||
| Add_Library ( | |||||
| libhelloworld-objects | |||||
| OBJECT | |||||
| ${LIBHELLOWORLD_HEADER_FILES} | |||||
| ${LIBHELLOWORLD_INLINE_FILES} | |||||
| ${LIBHELLOWORLD_SOURCE_FILES} ) | |||||
| Target_Include_Directories ( | |||||
| libhelloworld-objects | |||||
| PUBLIC | |||||
| $<BUILD_INTERFACE:${LIBHELLOWORLD_INCLUDE_DIR}> | |||||
| $<INSTALL_INTERFACE:${LIBHELLOWORLD_INSTALL_DIR_INCLUDE}> ) | |||||
| # Static Library ################################################################################## | |||||
| Add_Library ( | |||||
| libhelloworld-static | |||||
| STATIC | |||||
| $<TARGET_OBJECTS:libhelloworld-objects> ) | |||||
| Set_Target_Properties ( | |||||
| libhelloworld-static | |||||
| PROPERTIES | |||||
| VERSION "${LIBHELLOWORLD_VERSION}-${LIBHELLOWORLD_VERSION_HASH_SHORT}" | |||||
| OUTPUT_NAME "${LIBHELLOWORLD_OUTPUTNAME}" ) | |||||
| Target_Include_Directories ( | |||||
| libhelloworld-static | |||||
| PUBLIC | |||||
| $<BUILD_INTERFACE:${LIBHELLOWORLD_INCLUDE_DIR}> | |||||
| $<INSTALL_INTERFACE:${LIBHELLOWORLD_INSTALL_DIR_INCLUDE}> ) | |||||
| # Shared Library ################################################################################## | |||||
| Add_Library ( | |||||
| libhelloworld-shared | |||||
| SHARED | |||||
| $<TARGET_OBJECTS:libhelloworld-objects> ) | |||||
| Set_Target_Properties ( | |||||
| libhelloworld-shared | |||||
| PROPERTIES | |||||
| VERSION "${LIBHELLOWORLD_VERSION}-${LIBHELLOWORLD_VERSION_HASH_SHORT}" | |||||
| OUTPUT_NAME "${LIBHELLOWORLD_OUTPUTNAME}" ) | |||||
| Target_Include_Directories ( | |||||
| libhelloworld-shared | |||||
| PUBLIC | |||||
| $<BUILD_INTERFACE:${LIBHELLOWORLD_INCLUDE_DIR}> | |||||
| $<INSTALL_INTERFACE:${LIBHELLOWORLD_INSTALL_DIR_INCLUDE}> ) | |||||
| # Tests ########################################################################################### | |||||
| If ( GTest_FOUND ) | |||||
| ForEach ( FILE IN LISTS LIBHELLOWORLD_TEST_SOURCE_FILES ) | |||||
| # Add Test | |||||
| File ( RELATIVE_PATH RELFILE "${LIBHELLOWORLD_SOURCE_DIR}" "${FILE}" ) | |||||
| Get_Filename_Component ( TEST_DIR "${RELFILE}" DIRECTORY ) | |||||
| Get_Filename_Component ( TEST_NAME "${RELFILE}" NAME_WE ) | |||||
| Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) | |||||
| String ( REPLACE ".test" "" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| Set ( TEST_NAME "test-${TEST_NAME}" ) | |||||
| Add_Executable ( ${TEST_NAME} | |||||
| EXCLUDE_FROM_ALL | |||||
| ${HELLOWORLD_TEST_HEADER_FILES} | |||||
| ${HELLOWORLD_TEST_INLINE_FILES} | |||||
| ${FILE} ) | |||||
| Target_Link_Libraries ( ${TEST_NAME} | |||||
| PUBLIC | |||||
| libhelloworld-objects | |||||
| GTest::Main ) | |||||
| # Sanitizers | |||||
| If ( Sanitizers_FOUND ) | |||||
| Add_Sanitizers ( ${TEST_NAME} ) | |||||
| EndIf ( ) | |||||
| # pedantic | |||||
| If ( HAS_PEDANTIC ) | |||||
| Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) | |||||
| EndIf ( ) | |||||
| # test | |||||
| If ( HAS_CMAKE_TESTS ) | |||||
| Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} GROUP gedt ) | |||||
| Else ( ) | |||||
| Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) | |||||
| EndIf ( ) | |||||
| EndForEach ( ) | |||||
| EndIf ( ) | |||||
| # Optimization #################################################################################### | |||||
| # sanitizers | |||||
| If ( Sanitizers_FOUND ) | |||||
| Add_Sanitizers ( libhelloworld-objects ) | |||||
| EndIf ( ) | |||||
| # pedantic | |||||
| If ( HAS_PEDANTIC ) | |||||
| Pedantic_Apply_Flags_Target ( libhelloworld-objects ALL ) | |||||
| Pedantic_Apply_Flags_Target ( libhelloworld-static ALL ) | |||||
| Pedantic_Apply_Flags_Target ( libhelloworld-shared ALL ) | |||||
| EndIf ( ) | |||||
| # cotire | |||||
| If ( HAS_COTIRE ) | |||||
| Cotire ( libhelloworld-objects ) | |||||
| Cotire ( libhelloworld-static ) | |||||
| Cotire ( libhelloworld-shared ) | |||||
| EndIf ( ) | |||||
| # Install ######################################################################################### | |||||
| # Header | |||||
| If ( LIBHELLOWORLD_INSTALL_HEADER ) | |||||
| Install ( DIRECTORY "${LIBHELLOWORLD_INCLUDE_DIR}/libhelloworld" | |||||
| DESTINATION "${LIBHELLOWORLD_INSTALL_DIR_INCLUDE}" | |||||
| FILES_MATCHING | |||||
| PATTERN "*.h" | |||||
| PATTERN "*.inl" | |||||
| PATTERN "*.test.h" EXCLUDE | |||||
| PATTERN "*.test.inl" EXCLUDE ) | |||||
| EndIf ( ) | |||||
| # Static | |||||
| If ( LIBHELLOWORLD_INSTALL_STATIC ) | |||||
| Install ( TARGETS libhelloworld-static | |||||
| EXPORT libhelloworld | |||||
| DESTINATION "${LIBHELLOWORLD_INSTALL_DIR_LIB}" ) | |||||
| EndIf ( ) | |||||
| # Shared | |||||
| If ( LIBHELLOWORLD_INSTALL_SHARED ) | |||||
| Install ( TARGETS libhelloworld-shared | |||||
| EXPORT libhelloworld | |||||
| DESTINATION "${LIBHELLOWORLD_INSTALL_DIR_LIB}" ) | |||||
| EndIf ( ) | |||||
| # Debug | |||||
| If ( HAS_STRIP_SYMBOLS AND NOT LIBHELLOWORLD_NO_STRIP ) | |||||
| Strip_Symbols ( libhelloworld-shared LIBHELLOWORLD_DBG_FILE ) | |||||
| If ( LIBHELLOWORLD_INSTALL_DEBUG ) | |||||
| Install ( FILES "${LIBHELLOWORLD_DBG_FILE}" | |||||
| DESTINATION "${LIBHELLOWORLD_INSTALL_DIR_LIB}" ) | |||||
| EndIf ( ) | |||||
| EndIf ( ) | |||||
| # Package | |||||
| Include ( CMakePackageConfigHelpers ) | |||||
| Write_Basic_Package_Version_File ( | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config-version.cmake" | |||||
| VERSION "${LIBHELLOWORLD_VERSION}" | |||||
| COMPATIBILITY AnyNewerVersion ) | |||||
| Configure_File ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-config.cmake" | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config.cmake" | |||||
| @ONLY ) | |||||
| Set ( ConfigPackageLocation "${LIBHELLOWORLD_INSTALL_DIR_SHARE}/cmake" ) | |||||
| Install ( EXPORT libhelloworld | |||||
| NAMESPACE libhelloworld:: | |||||
| DESTINATION ${ConfigPackageLocation} ) | |||||
| Install ( FILES | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config.cmake" | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config-version.cmake" | |||||
| DESTINATION | |||||
| ${ConfigPackageLocation} | |||||
| COMPONENT | |||||
| Devel ) | |||||
| @@ -1,9 +1,10 @@ | |||||
| # libhelloworld-config.cmake - package configuration file | # libhelloworld-config.cmake - package configuration file | ||||
| # Include ( CMakeFindDependencyMacro ) | |||||
| # Find_Dependency ( <dependency> ) | |||||
| Message ( FATAL_ERROR "Please configure the dependencies!" ) | |||||
| # Include ( CMakeFindDependencyMacro ) | |||||
| # Find_Dependency ( <dependency> ) | |||||
| Include ( FindPackageHandleStandardArgs ) | |||||
| Set ( ${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE} ) | |||||
| Find_Package_Handle_Standard_Args ( libhelloworld CONFIG_MODE ) | |||||
| Include ( "${CMAKE_CURRENT_LIST_DIR}/libhelloworld.cmake") | |||||
| Include ( FindPackageHandleStandardArgs ) | |||||
| Set ( ${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE} ) | |||||
| Find_Package_Handle_Standard_Args ( libhelloworld CONFIG_MODE ) | |||||
| Include ( "${CMAKE_CURRENT_LIST_DIR}/libhelloworld.cmake") | |||||
| @@ -1,28 +1,29 @@ | |||||
| # This file contains constant variables that are fixed to this project | # This file contains constant variables that are fixed to this project | ||||
| # Version | # Version | ||||
| Set ( LIBHELLOWORLD_VERSION_MAJOR 1 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_MINOR 0 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_PATCH 0 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_BUILD 0 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_HASH "" ) | |||||
| Set ( LIBHELLOWORLD_VERSION_BEHIND 0 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_DIRTY 0 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_MAJOR 1 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_MINOR 0 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_PATCH 0 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_BUILD 0 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_BEHIND 0 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_DIRTY 0 ) | |||||
| Set ( LIBHELLOWORLD_VERSION_HASH "nogit" ) | |||||
| Set ( LIBHELLOWORLD_VERSION_HASH_SHORT "nogit" ) | |||||
| # Names | # Names | ||||
| Set ( LIBHELLOWORLD_PROJECT_NAME "libhelloworld" ) | |||||
| Set ( LIBHELLOWORLD_PROJECT_DESCRIPTION "A simple hello world library" ) | |||||
| Set ( LIBHELLOWORLD_PROJECT_NAME "libhelloworld" ) | |||||
| Set ( LIBHELLOWORLD_PROJECT_DESCRIPTION "A simple hello world library" ) | |||||
| # Include generated variables for further usage | # Include generated variables for further usage | ||||
| Include ( ${CMAKE_CURRENT_LIST_DIR}/libhelloworld-var.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_LIST_DIR}/libhelloworld-var.cmake ) | |||||
| # Install directories | # Install directories | ||||
| Set ( LIBHELLOWORLD_INSTALL_DIR_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${LIBHELLOWORLD_NAME}" ) | |||||
| Set ( LIBHELLOWORLD_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" ) | |||||
| Set ( LIBHELLOWORLD_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${LIBHELLOWORLD_NAME}" ) | |||||
| Set ( LIBHELLOWORLD_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" ) | |||||
| Set ( LIBHELLOWORLD_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${LIBHELLOWORLD_NAME}" ) | |||||
| Set ( LIBHELLOWORLD_INSTALL_DIR_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${LIBHELLOWORLD_NAME}" ) | |||||
| # C Standard | # C Standard | ||||
| Set ( CMAKE_C_STANDARD 11 ) | |||||
| Set ( CMAKE_CXX_STANDARD 17 ) | |||||
| Set ( CMAKE_C_STANDARD_REQUIRED ON ) | |||||
| Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) | |||||
| Set ( CMAKE_C_STANDARD 11 ) | |||||
| Set ( CMAKE_CXX_STANDARD 20 ) | |||||
| Set ( CMAKE_C_STANDARD_REQUIRED ON ) | |||||
| Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) | |||||
| @@ -1,23 +1,26 @@ | |||||
| # This file contains options that can be passed to the cmake command | # This file contains options that can be passed to the cmake command | ||||
| Option ( LIBHELLOWORLD_INSTALL_HEADER | |||||
| "Install headers of libhelloworld." | |||||
| ON ) | |||||
| Option ( LIBHELLOWORLD_INSTALL_STATIC | |||||
| "Install static library of libhelloworld." | |||||
| ON ) | |||||
| Option ( LIBHELLOWORLD_INSTALL_SHARED | |||||
| "Install shared library of libhelloworld." | |||||
| ON ) | |||||
| Option ( LIBHELLOWORLD_INSTALL_DEBUG | |||||
| "Install the stripped debug informations of libhelloworld." | |||||
| OFF ) | |||||
| Option ( LIBHELLOWORLD_INSTALL_PACKAGE | |||||
| "Install the cmake package of libhelloworld." | |||||
| ON ) | |||||
| Option ( LIBHELLOWORLD_NO_STRIP | |||||
| "Do not strip debug symbols from binary." | |||||
| OFF ) | |||||
| Option ( LIBHELLOWORLD_USE_GIT_VERSION | |||||
| "Read the git tags to get the version of libhelloworld" | |||||
| ON ) | |||||
| Option ( LIBHELLOWORLD_INSTALL_HEADER | |||||
| "Install headers of libhelloworld." | |||||
| ON ) | |||||
| Option ( LIBHELLOWORLD_INSTALL_STATIC | |||||
| "Install static library of libhelloworld." | |||||
| ON ) | |||||
| Option ( LIBHELLOWORLD_INSTALL_SHARED | |||||
| "Install shared library of libhelloworld." | |||||
| ON ) | |||||
| Option ( LIBHELLOWORLD_INSTALL_DEBUG | |||||
| "Install the stripped debug informations of libhelloworld." | |||||
| OFF ) | |||||
| Option ( LIBHELLOWORLD_INSTALL_PACKAGE | |||||
| "Install the cmake package of libhelloworld." | |||||
| ON ) | |||||
| Option ( LIBHELLOWORLD_NO_STRIP | |||||
| "Do not strip debug symbols from binary." | |||||
| OFF ) | |||||
| Option ( LIBHELLOWORLD_USE_GIT_VERSION | |||||
| "Read the git tags to get the version of libhelloworld" | |||||
| ON ) | |||||
| Option ( LIBHELLOWORLD_IGNORE_MODULES | |||||
| "Use only config mode to find other packages" | |||||
| OFF ) | |||||
| @@ -1,32 +1,34 @@ | |||||
| # This file contains generated variables that are needed for the project | # This file contains generated variables that are needed for the project | ||||
| # Git Version | # Git Version | ||||
| If ( LIBHELLOWORLD_USE_GIT_VERSION ) | |||||
| Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) | |||||
| If ( HAS_GIT_HELPER ) | |||||
| GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/.. | |||||
| LIBHELLOWORLD_VERSION_MAJOR | |||||
| LIBHELLOWORLD_VERSION_MINOR | |||||
| LIBHELLOWORLD_VERSION_PATCH | |||||
| LIBHELLOWORLD_VERSION_BUILD | |||||
| LIBHELLOWORLD_VERSION_HASH | |||||
| LIBHELLOWORLD_VERSION_BEHIND | |||||
| LIBHELLOWORLD_VERSION_DIRTY ) | |||||
| EndIf ( ) | |||||
| EndIf ( ) | |||||
| If ( LIBHELLOWORLD_USE_GIT_VERSION ) | |||||
| Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) | |||||
| If ( HAS_GIT_HELPER ) | |||||
| GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/../../.. | |||||
| LIBHELLOWORLD_VERSION_MAJOR | |||||
| LIBHELLOWORLD_VERSION_MINOR | |||||
| LIBHELLOWORLD_VERSION_PATCH | |||||
| LIBHELLOWORLD_VERSION_BUILD | |||||
| LIBHELLOWORLD_VERSION_HASH | |||||
| LIBHELLOWORLD_VERSION_BEHIND | |||||
| LIBHELLOWORLD_VERSION_DIRTY ) | |||||
| EndIf ( ) | |||||
| EndIf ( ) | |||||
| # Strings | # Strings | ||||
| Set ( LIBHELLOWORLD_VERSION_SHORT | |||||
| "${LIBHELLOWORLD_VERSION_MAJOR}.${LIBHELLOWORLD_VERSION_MINOR}" ) | |||||
| Set ( LIBHELLOWORLD_VERSION | |||||
| "${LIBHELLOWORLD_VERSION_SHORT}.${LIBHELLOWORLD_VERSION_PATCH}.${LIBHELLOWORLD_VERSION_BUILD}" ) | |||||
| Set ( LIBHELLOWORLD_VERSION_COMPLETE | |||||
| "${LIBHELLOWORLD_VERSION}" ) | |||||
| Set ( LIBHELLOWORLD_NAME | |||||
| "${LIBHELLOWORLD_PROJECT_NAME}-${LIBHELLOWORLD_VERSION_SHORT}" ) | |||||
| Set ( LIBHELLOWORLD_OUTPUTNAME | |||||
| "${LIBHELLOWORLD_PROJECT_NAME}" ) | |||||
| If ( LIBHELLOWORLD_VERSION_BEHIND ) | |||||
| Set ( LIBHELLOWORLD_VERSION_COMPLETE | |||||
| "${LIBHELLOWORLD_VERSION_COMPLETE}+${LIBHELLOWORLD_VERSION_BEHIND}" ) | |||||
| EndIf ( ) | |||||
| Set ( LIBHELLOWORLD_VERSION "${LIBHELLOWORLD_VERSION_SHORT}.${LIBHELLOWORLD_VERSION_PATCH}.${LIBHELLOWORLD_VERSION_BUILD}" ) | |||||
| Set ( LIBHELLOWORLD_VERSION_SHORT "${LIBHELLOWORLD_VERSION_MAJOR}.${LIBHELLOWORLD_VERSION_MINOR}" ) | |||||
| Set ( LIBHELLOWORLD_VERSION_COMPLETE "${LIBHELLOWORLD_VERSION}" ) | |||||
| If ( LIBHELLOWORLD_VERSION_BEHIND ) | |||||
| Set ( LIBHELLOWORLD_VERSION_COMPLETE "${LIBHELLOWORLD_VERSION_COMPLETE}+${LIBHELLOWORLD_VERSION_BEHIND}" ) | |||||
| EndIf ( ) | |||||
| Set ( LIBHELLOWORLD_NAME "${LIBHELLOWORLD_PROJECT_NAME}-${LIBHELLOWORLD_VERSION_SHORT}" ) | |||||
| Set ( LIBHELLOWORLD_OUTPUTNAME "${LIBHELLOWORLD_PROJECT_NAME}" ) | |||||
| String ( SUBSTRING "${LIBHELLOWORLD_VERSION_HASH}" 0 8 LIBHELLOWORLD_VERSION_HASH_SHORT ) | |||||
| # Extra | |||||
| If ( LIBHELLOWORLD_IGNORE_MODULES ) | |||||
| Set ( LIBHELLOWORLD_FIND_PACKAGE_EXTRA_ARGS "CONFIG" ) | |||||
| EndIf ( ) | |||||
| @@ -1,107 +0,0 @@ | |||||
| # Initialize ###################################################################################### | |||||
| Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) | |||||
| Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) | |||||
| Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) | |||||
| Find_Package ( Sanitizers QUIET ) | |||||
| # Object Library ################################################################################## | |||||
| Set ( CMAKE_POSITION_INDEPENDENT_CODE ON ) | |||||
| Set ( LIBHELLOWORLD_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_HEADER_FILES ${LIBHELLOWORLD_INCLUDE_DIR}/*.h ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_INLINE_FILES ${LIBHELLOWORLD_INCLUDE_DIR}/*.inl ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) | |||||
| Add_Library ( libhelloworld-objects | |||||
| OBJECT | |||||
| ${LIBHELLOWORLD_HEADER_FILES} | |||||
| ${LIBHELLOWORLD_INLINE_FILES} | |||||
| ${LIBHELLOWORLD_SOURCE_FILES} ) | |||||
| Target_Include_Directories ( libhelloworld-objects | |||||
| PUBLIC | |||||
| $<BUILD_INTERFACE:${LIBHELLOWORLD_INCLUDE_DIR}> | |||||
| $<INSTALL_INTERFACE:${LIBHELLOWORLD_INSTALL_DIR_INCLUDE}> ) | |||||
| # Static Library ################################################################################## | |||||
| Add_Library ( libhelloworld-static STATIC $<TARGET_OBJECTS:libhelloworld-objects> ) | |||||
| Set_Target_Properties ( libhelloworld-static | |||||
| PROPERTIES | |||||
| OUTPUT_NAME "${LIBHELLOWORLD_OUTPUTNAME}" | |||||
| VERSION ${LIBHELLOWORLD_VERSION} ) | |||||
| Target_Include_Directories ( libhelloworld-static | |||||
| PUBLIC | |||||
| $<BUILD_INTERFACE:${LIBHELLOWORLD_INCLUDE_DIR}> | |||||
| $<INSTALL_INTERFACE:${LIBHELLOWORLD_INSTALL_DIR_INCLUDE}> ) | |||||
| # Shared Library ################################################################################## | |||||
| Add_Library ( libhelloworld-shared SHARED $<TARGET_OBJECTS:libhelloworld-objects> ) | |||||
| Set_Target_Properties ( libhelloworld-shared | |||||
| PROPERTIES | |||||
| OUTPUT_NAME "${LIBHELLOWORLD_OUTPUTNAME}" | |||||
| VERSION ${LIBHELLOWORLD_VERSION} | |||||
| SOVERSION ${LIBHELLOWORLD_VERSION_SHORT} ) | |||||
| Target_Include_Directories ( libhelloworld-shared | |||||
| PUBLIC | |||||
| $<BUILD_INTERFACE:${LIBHELLOWORLD_INCLUDE_DIR}> | |||||
| $<INSTALL_INTERFACE:${LIBHELLOWORLD_INSTALL_DIR_INCLUDE}> ) | |||||
| # Optimization #################################################################################### | |||||
| # sanitizers | |||||
| If ( Sanitizers_FOUND ) | |||||
| Add_Sanitizers ( libhelloworld-objects ) | |||||
| EndIf ( ) | |||||
| # pedantic | |||||
| If ( HAS_PEDANTIC ) | |||||
| Pedantic_Apply_Flags_Target ( libhelloworld-objects ALL ) | |||||
| Pedantic_Apply_Flags_Target ( libhelloworld-static ALL ) | |||||
| Pedantic_Apply_Flags_Target ( libhelloworld-shared ALL ) | |||||
| EndIf ( ) | |||||
| # cotire | |||||
| If ( HAS_COTIRE ) | |||||
| Cotire ( libhelloworld-objects ) | |||||
| Cotire ( libhelloworld-static ) | |||||
| Cotire ( libhelloworld-shared ) | |||||
| EndIf ( ) | |||||
| # Install ######################################################################################### | |||||
| Set ( LIBHELLOWORLD_HAS_EXPORT False PARENT_SCOPE ) | |||||
| # Header | |||||
| If ( LIBHELLOWORLD_INSTALL_HEADER ) | |||||
| Install ( FILES ${LIBHELLOWORLD_INCLUDE_DIR}/libhelloworld.h | |||||
| DESTINATION ${LIBHELLOWORLD_INSTALL_DIR_INCLUDE} ) | |||||
| Install ( DIRECTORY ${LIBHELLOWORLD_INCLUDE_DIR}/libhelloworld | |||||
| DESTINATION ${LIBHELLOWORLD_INSTALL_DIR_INCLUDE} ) | |||||
| EndIf ( ) | |||||
| # Static | |||||
| If ( LIBHELLOWORLD_INSTALL_STATIC ) | |||||
| Set ( LIBHELLOWORLD_HAS_EXPORT True PARENT_SCOPE ) | |||||
| Install ( TARGETS libhelloworld-static | |||||
| EXPORT libhelloworld | |||||
| DESTINATION ${LIBHELLOWORLD_INSTALL_DIR_LIB} ) | |||||
| EndIf ( ) | |||||
| # Shared | |||||
| If ( LIBHELLOWORLD_INSTALL_SHARED ) | |||||
| Set ( LIBHELLOWORLD_HAS_EXPORT True PARENT_SCOPE ) | |||||
| Install ( TARGETS libhelloworld-shared | |||||
| EXPORT libhelloworld | |||||
| DESTINATION ${LIBHELLOWORLD_INSTALL_DIR_LIB} ) | |||||
| EndIf ( ) | |||||
| # Debug | |||||
| If ( HAS_STRIP_SYMBOLS AND NOT LIBHELLOWORLD_NO_STRIP ) | |||||
| Strip_Symbols ( libhelloworld-shared LIBHELLOWORLD_DBG_FILE ) | |||||
| If ( LIBHELLOWORLD_INSTALL_DEBUG ) | |||||
| Install ( FILES ${LIBHELLOWORLD_DBG_FILE} | |||||
| DESTINATION ${LIBHELLOWORLD_INSTALL_DIR_LIB} ) | |||||
| EndIf ( ) | |||||
| EndIf ( ) | |||||
| @@ -1,4 +1,4 @@ | |||||
| #include <gtest/gtest.h> | |||||
| #include <libhelloworld/dummy.test.h> | |||||
| #include <libhelloworld.h> | #include <libhelloworld.h> | ||||
| @@ -0,0 +1,3 @@ | |||||
| #pragma once | |||||
| #include <gtest/gtest.h> | |||||
| @@ -1,59 +0,0 @@ | |||||
| # Initialize ###################################################################################### | |||||
| Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) | |||||
| Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) | |||||
| Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) | |||||
| Find_Package ( Sanitizers QUIET ) | |||||
| # Test ############################################################################################ | |||||
| Find_Package ( GTest QUIET ) | |||||
| If ( NOT "${GTest_FOUND}" ) | |||||
| Return ( ) | |||||
| EndIf ( ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_TEST_HEADER_FILES | |||||
| ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_TEST_INLINE_FILES | |||||
| ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) | |||||
| File ( GLOB_RECURSE LIBHELLOWORLD_TEST_SOURCE_FILES | |||||
| RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} | |||||
| ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) | |||||
| ForEach ( FILE IN LISTS LIBHELLOWORLD_TEST_SOURCE_FILES ) | |||||
| # add test | |||||
| Get_Filename_Component ( TEST_DIR ${FILE} DIRECTORY ) | |||||
| Get_Filename_Component ( TEST_NAME ${FILE} NAME_WE ) | |||||
| Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) | |||||
| String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| Set ( TEST_NAME "test-${TEST_NAME}" ) | |||||
| Add_Executable ( ${TEST_NAME} | |||||
| EXCLUDE_FROM_ALL | |||||
| ${LIBHELLOWORLD_TEST_HEADER_FILES} | |||||
| ${LIBHELLOWORLD_TEST_INLINE_FILES} | |||||
| ${FILE} ) | |||||
| Target_Link_Libraries ( ${TEST_NAME} | |||||
| PUBLIC | |||||
| libhelloworld-objects | |||||
| GTest::Main ) | |||||
| # Sanitizers | |||||
| If ( Sanitizers_FOUND ) | |||||
| Add_Sanitizers ( ${TEST_NAME} ) | |||||
| EndIf ( ) | |||||
| # pedantic | |||||
| If ( HAS_PEDANTIC ) | |||||
| Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) | |||||
| EndIf ( ) | |||||
| # test | |||||
| If ( HAS_CMAKE_TESTS ) | |||||
| Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} GROUP libhelloworld ) | |||||
| Else ( ) | |||||
| Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) | |||||
| EndIf ( ) | |||||
| EndForEach ( ) | |||||
| @@ -1,63 +1,177 @@ | |||||
| # Initialize CMake ################################################################################ | # Initialize CMake ################################################################################ | ||||
| CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) | |||||
| # Set CMAKE_BUILD_TYPE | |||||
| If ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) | |||||
| EndIf ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) | |||||
| # Set CMAKE_MODULE_PATH | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} | |||||
| "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| EndIf ( ) | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} | |||||
| "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| EndIf ( ) | |||||
| CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) | |||||
| # CMAKE_BUILD_TYPE | |||||
| If ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) | |||||
| EndIf ( NOT CMAKE_BUILD_TYPE ) | |||||
| Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) | |||||
| # CMAKE_MODULE_PATH | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) | |||||
| EndIf ( ) | |||||
| If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) | |||||
| EndIf ( ) | |||||
| # Project ######################################################################################### | # Project ######################################################################################### | ||||
| Include ( GNUInstallDirs ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-options.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-const.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-var.cmake ) | |||||
| Project ( ${LIBINTERFACE_PROJECT_NAME} | |||||
| DESCRIPTION "${LIBINTERFACE_PROJECT_DESCRIPTION}" | |||||
| VERSION "${LIBINTERFACE_VERSION}" ) | |||||
| Include ( CTest ) | |||||
| # Subdirectories | |||||
| Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) | |||||
| Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) | |||||
| # Install | |||||
| If ( NOT LIBINTERFACE_HAS_EXPORT | |||||
| OR NOT LIBINTERFACE_INSTALL_PACKAGE ) | |||||
| Return ( ) | |||||
| EndIf ( ) | |||||
| Include ( CMakePackageConfigHelpers ) | |||||
| Write_Basic_Package_Version_File ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config-version.cmake" | |||||
| VERSION ${LIBINTERFACE_VERSION} | |||||
| COMPATIBILITY AnyNewerVersion ) | |||||
| Configure_File ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-config.cmake" | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config.cmake" | |||||
| @ONLY ) | |||||
| Set ( ConfigPackageLocation "${LIBINTERFACE_INSTALL_DIR_SHARE}/cmake" ) | |||||
| Install ( EXPORT | |||||
| libinterface | |||||
| NAMESPACE | |||||
| libinterface:: | |||||
| DESTINATION | |||||
| ${ConfigPackageLocation} ) | |||||
| Install ( FILES | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config.cmake" | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config-version.cmake" | |||||
| DESTINATION | |||||
| ${ConfigPackageLocation} | |||||
| COMPONENT | |||||
| Devel ) | |||||
| Include ( GNUInstallDirs ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-options.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-const.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-var.cmake ) | |||||
| Project ( ${LIBINTERFACE_PROJECT_NAME} | |||||
| DESCRIPTION "${LIBINTERFACE_PROJECT_DESCRIPTION}" | |||||
| VERSION "${LIBINTERFACE_VERSION}" ) | |||||
| Include ( CTest ) | |||||
| # Initialize ###################################################################################### | |||||
| Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) | |||||
| Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) | |||||
| Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) | |||||
| Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) | |||||
| Find_Package ( GTest QUIET ) | |||||
| Find_Package ( Sanitizers QUIET ) | |||||
| Message ( FATAL_ERROR "Please configure the dependencies of this project!" ) | |||||
| # Find_Package ( libinterface REQUIRED ${LIBINTERFACE_FIND_PACKAGE_EXTRA_ARGS} ) | |||||
| # Object Library ################################################################################## | |||||
| Set ( CMAKE_POSITION_INDEPENDENT_CODE ON ) | |||||
| Set ( LIBINTERFACE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src" ) | |||||
| Set ( LIBINTERFACE_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src" ) | |||||
| File ( GLOB_RECURSE LIBINTERFACE_HEADER_FILES "${LIBINTERFACE_INCLUDE_DIR}/*.h" ) | |||||
| File ( GLOB_RECURSE LIBINTERFACE_INLINE_FILES "${LIBINTERFACE_INCLUDE_DIR}/*.inl" ) | |||||
| File ( GLOB_RECURSE LIBINTERFACE_TEST_HEADER_FILES "${LIBINTERFACE_INCLUDE_DIR}/*.test.h" ) | |||||
| File ( GLOB_RECURSE LIBINTERFACE_TEST_INLINE_FILES "${LIBINTERFACE_INCLUDE_DIR}/*.test.inl" ) | |||||
| File ( GLOB_RECURSE LIBINTERFACE_TEST_SOURCE_FILES "${LIBINTERFACE_SOURCE_DIR}/*.test.cpp" ) | |||||
| ForEach ( TEST_FILE IN LISTS LIBINTERFACE_TEST_HEADER_FILES ) | |||||
| List ( REMOVE_ITEM LIBINTERFACE_HEADER_FILES "${TEST_FILE}" ) | |||||
| EndForEach ( ) | |||||
| ForEach ( TEST_FILE IN LISTS LIBINTERFACE_TEST_INLINE_FILES ) | |||||
| List ( REMOVE_ITEM LIBINTERFACE_INLINE_FILES "${TEST_FILE}" ) | |||||
| EndForEach ( ) | |||||
| Add_Library ( | |||||
| libinterface | |||||
| INTERFACE ) | |||||
| Target_Include_Directories ( | |||||
| libinterface | |||||
| INTERFACE | |||||
| $<BUILD_INTERFACE:${LIBINTERFACE_INCLUDE_DIR}> | |||||
| $<INSTALL_INTERFACE:${LIBINTERFACE_INSTALL_DIR_INCLUDE}> ) | |||||
| # Tests ########################################################################################### | |||||
| If ( GTest_FOUND ) | |||||
| ForEach ( FILE IN LISTS LIBINTERFACE_TEST_SOURCE_FILES ) | |||||
| # Add Test | |||||
| File ( RELATIVE_PATH RELFILE "${LIBINTERFACE_SOURCE_DIR}" "${FILE}" ) | |||||
| Get_Filename_Component ( TEST_DIR "${RELFILE}" DIRECTORY ) | |||||
| Get_Filename_Component ( TEST_NAME "${RELFILE}" NAME_WE ) | |||||
| Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) | |||||
| String ( REPLACE ".test" "" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| Set ( TEST_NAME "test-${TEST_NAME}" ) | |||||
| Add_Executable ( ${TEST_NAME} | |||||
| EXCLUDE_FROM_ALL | |||||
| ${HELLOWORLD_TEST_HEADER_FILES} | |||||
| ${HELLOWORLD_TEST_INLINE_FILES} | |||||
| ${FILE} ) | |||||
| Target_Link_Libraries ( ${TEST_NAME} | |||||
| PUBLIC | |||||
| libinterface | |||||
| GTest::Main ) | |||||
| # Sanitizers | |||||
| If ( Sanitizers_FOUND ) | |||||
| Add_Sanitizers ( ${TEST_NAME} ) | |||||
| EndIf ( ) | |||||
| # pedantic | |||||
| If ( HAS_PEDANTIC ) | |||||
| Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) | |||||
| EndIf ( ) | |||||
| # test | |||||
| If ( HAS_CMAKE_TESTS ) | |||||
| Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} GROUP gedt ) | |||||
| Else ( ) | |||||
| Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) | |||||
| EndIf ( ) | |||||
| EndForEach ( ) | |||||
| EndIf ( ) | |||||
| # Optimization #################################################################################### | |||||
| # sanitizers | |||||
| If ( Sanitizers_FOUND ) | |||||
| Add_Sanitizers ( libinterface ) | |||||
| EndIf ( ) | |||||
| # pedantic | |||||
| If ( HAS_PEDANTIC ) | |||||
| Pedantic_Apply_Flags_Target ( libinterface ALL VISIBILITY INTERFACE ) | |||||
| EndIf ( ) | |||||
| # cotire | |||||
| If ( HAS_COTIRE ) | |||||
| Cotire ( libinterface ) | |||||
| EndIf ( ) | |||||
| # Install ######################################################################################### | |||||
| # Header | |||||
| If ( LIBINTERFACE_INSTALL_HEADER ) | |||||
| Install ( DIRECTORY "${LIBINTERFACE_INCLUDE_DIR}/libinterface" | |||||
| DESTINATION "${LIBINTERFACE_INSTALL_DIR_INCLUDE}" | |||||
| FILES_MATCHING | |||||
| PATTERN "*.h" | |||||
| PATTERN "*.inl" | |||||
| PATTERN "*.test.h" EXCLUDE | |||||
| PATTERN "*.test.inl" EXCLUDE ) | |||||
| Install( TARGETS libinterface | |||||
| EXPORT libinterface | |||||
| DESTINATION "${LIBINTERFACE_INSTALL_DIR_INCLUDE}" ) | |||||
| EndIf ( ) | |||||
| # Package | |||||
| Include ( CMakePackageConfigHelpers ) | |||||
| Write_Basic_Package_Version_File ( | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config-version.cmake" | |||||
| VERSION "${LIBINTERFACE_VERSION}" | |||||
| COMPATIBILITY AnyNewerVersion ) | |||||
| Configure_File ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-config.cmake" | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config.cmake" | |||||
| @ONLY ) | |||||
| Set ( ConfigPackageLocation "${LIBINTERFACE_INSTALL_DIR_SHARE}/cmake" ) | |||||
| Install ( EXPORT libinterface | |||||
| NAMESPACE libinterface:: | |||||
| DESTINATION ${ConfigPackageLocation} ) | |||||
| Install ( FILES | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config.cmake" | |||||
| "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config-version.cmake" | |||||
| DESTINATION | |||||
| ${ConfigPackageLocation} | |||||
| COMPONENT | |||||
| Devel ) | |||||
| @@ -1,9 +1,10 @@ | |||||
| # libinterface-config.cmake - package configuration file | # libinterface-config.cmake - package configuration file | ||||
| # Include ( CMakeFindDependencyMacro ) | |||||
| # Find_Dependency ( <dependency> ) | |||||
| Message ( FATAL_ERROR "Please configure the dependencies!" ) | |||||
| # Include ( CMakeFindDependencyMacro ) | |||||
| # Find_Dependency ( <dependency> ) | |||||
| Include ( FindPackageHandleStandardArgs ) | |||||
| Set ( ${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE} ) | |||||
| Find_Package_Handle_Standard_Args ( libinterface CONFIG_MODE ) | |||||
| Include ( "${CMAKE_CURRENT_LIST_DIR}/libinterface.cmake") | |||||
| Include ( FindPackageHandleStandardArgs ) | |||||
| Set ( ${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE} ) | |||||
| Find_Package_Handle_Standard_Args ( libinterface CONFIG_MODE ) | |||||
| Include ( "${CMAKE_CURRENT_LIST_DIR}/libinterface.cmake") | |||||
| @@ -1,28 +1,29 @@ | |||||
| # This file contains constant variables that are fixed to this project | # This file contains constant variables that are fixed to this project | ||||
| # Version | # Version | ||||
| Set ( LIBINTERFACE_VERSION_MAJOR 1 ) | |||||
| Set ( LIBINTERFACE_VERSION_MINOR 0 ) | |||||
| Set ( LIBINTERFACE_VERSION_PATCH 0 ) | |||||
| Set ( LIBINTERFACE_VERSION_BUILD 0 ) | |||||
| Set ( LIBINTERFACE_VERSION_HASH "" ) | |||||
| Set ( LIBINTERFACE_VERSION_BEHIND 0 ) | |||||
| Set ( LIBINTERFACE_VERSION_DIRTY 0 ) | |||||
| Set ( LIBINTERFACE_VERSION_MAJOR 1 ) | |||||
| Set ( LIBINTERFACE_VERSION_MINOR 0 ) | |||||
| Set ( LIBINTERFACE_VERSION_PATCH 0 ) | |||||
| Set ( LIBINTERFACE_VERSION_BUILD 0 ) | |||||
| Set ( LIBINTERFACE_VERSION_BEHIND 0 ) | |||||
| Set ( LIBINTERFACE_VERSION_DIRTY 0 ) | |||||
| Set ( LIBINTERFACE_VERSION_HASH "nogit" ) | |||||
| Set ( LIBINTERFACE_VERSION_HASH_SHORT "nogit" ) | |||||
| # Names | # Names | ||||
| Set ( LIBINTERFACE_PROJECT_NAME "libinterface" ) | |||||
| Set ( LIBINTERFACE_PROJECT_DESCRIPTION "A simple interface library" ) | |||||
| Set ( LIBINTERFACE_PROJECT_NAME "libinterface" ) | |||||
| Set ( LIBINTERFACE_PROJECT_DESCRIPTION "A simple interface library" ) | |||||
| # Include generated variables for further usage | # Include generated variables for further usage | ||||
| Include ( ${CMAKE_CURRENT_LIST_DIR}/libinterface-var.cmake ) | |||||
| Include ( ${CMAKE_CURRENT_LIST_DIR}/libinterface-var.cmake ) | |||||
| # Install directories | # Install directories | ||||
| Set ( LIBINTERFACE_INSTALL_DIR_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${LIBINTERFACE_NAME}" ) | |||||
| Set ( LIBINTERFACE_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" ) | |||||
| Set ( LIBINTERFACE_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${LIBINTERFACE_NAME}" ) | |||||
| Set ( LIBINTERFACE_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" ) | |||||
| Set ( LIBINTERFACE_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${LIBINTERFACE_NAME}" ) | |||||
| Set ( LIBINTERFACE_INSTALL_DIR_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${LIBINTERFACE_NAME}" ) | |||||
| # C Standard | # C Standard | ||||
| Set ( CMAKE_C_STANDARD 11 ) | |||||
| Set ( CMAKE_CXX_STANDARD 17 ) | |||||
| Set ( CMAKE_C_STANDARD_REQUIRED ON ) | |||||
| Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) | |||||
| Set ( CMAKE_C_STANDARD 11 ) | |||||
| Set ( CMAKE_CXX_STANDARD 20 ) | |||||
| Set ( CMAKE_C_STANDARD_REQUIRED ON ) | |||||
| Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) | |||||
| @@ -1,11 +1,14 @@ | |||||
| # This file contains options that can be passed to the cmake command | # This file contains options that can be passed to the cmake command | ||||
| Option ( LIBINTERFACE_INSTALL_HEADER | |||||
| "Install headers of libinterface." | |||||
| ON ) | |||||
| Option ( LIBINTERFACE_INSTALL_PACKAGE | |||||
| "Install the cmake package of libinterface." | |||||
| ON ) | |||||
| Option ( LIBINTERFACE_USE_GIT_VERSION | |||||
| "Read the git tags to get the version of libinterface" | |||||
| ON ) | |||||
| Option ( LIBINTERFACE_INSTALL_HEADER | |||||
| "Install headers of libinterface." | |||||
| ON ) | |||||
| Option ( LIBINTERFACE_INSTALL_PACKAGE | |||||
| "Install the cmake package of libinterface." | |||||
| ON ) | |||||
| Option ( LIBINTERFACE_USE_GIT_VERSION | |||||
| "Read the git tags to get the version of libinterface" | |||||
| ON ) | |||||
| Option ( LIBINTERFACE_IGNORE_MODULES | |||||
| "Use only config mode to find other packages" | |||||
| OFF ) | |||||
| @@ -1,32 +1,34 @@ | |||||
| # This file contains generated variables that are needed for the project | # This file contains generated variables that are needed for the project | ||||
| # Git Version | # Git Version | ||||
| If ( LIBINTERFACE_USE_GIT_VERSION ) | |||||
| Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) | |||||
| If ( HAS_GIT_HELPER ) | |||||
| GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/.. | |||||
| LIBINTERFACE_VERSION_MAJOR | |||||
| LIBINTERFACE_VERSION_MINOR | |||||
| LIBINTERFACE_VERSION_PATCH | |||||
| LIBINTERFACE_VERSION_BUILD | |||||
| LIBINTERFACE_VERSION_HASH | |||||
| LIBINTERFACE_VERSION_BEHIND | |||||
| LIBINTERFACE_VERSION_DIRTY ) | |||||
| EndIf ( ) | |||||
| EndIf ( ) | |||||
| If ( LIBINTERFACE_USE_GIT_VERSION ) | |||||
| Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) | |||||
| If ( HAS_GIT_HELPER ) | |||||
| GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/../../.. | |||||
| LIBINTERFACE_VERSION_MAJOR | |||||
| LIBINTERFACE_VERSION_MINOR | |||||
| LIBINTERFACE_VERSION_PATCH | |||||
| LIBINTERFACE_VERSION_BUILD | |||||
| LIBINTERFACE_VERSION_HASH | |||||
| LIBINTERFACE_VERSION_BEHIND | |||||
| LIBINTERFACE_VERSION_DIRTY ) | |||||
| EndIf ( ) | |||||
| EndIf ( ) | |||||
| # Strings | # Strings | ||||
| Set ( LIBINTERFACE_VERSION_SHORT | |||||
| "${LIBINTERFACE_VERSION_MAJOR}.${LIBINTERFACE_VERSION_MINOR}" ) | |||||
| Set ( LIBINTERFACE_VERSION | |||||
| "${LIBINTERFACE_VERSION_SHORT}.${LIBINTERFACE_VERSION_PATCH}.${LIBINTERFACE_VERSION_BUILD}" ) | |||||
| Set ( LIBINTERFACE_VERSION_COMPLETE | |||||
| "${LIBINTERFACE_VERSION}" ) | |||||
| Set ( LIBINTERFACE_NAME | |||||
| "${LIBINTERFACE_PROJECT_NAME}-${LIBINTERFACE_VERSION_SHORT}" ) | |||||
| Set ( LIBINTERFACE_OUTPUTNAME | |||||
| "${LIBINTERFACE_PROJECT_NAME}" ) | |||||
| If ( LIBINTERFACE_VERSION_BEHIND ) | |||||
| Set ( LIBINTERFACE_VERSION_COMPLETE | |||||
| "${LIBINTERFACE_VERSION_COMPLETE}+${LIBINTERFACE_VERSION_BEHIND}" ) | |||||
| EndIf ( ) | |||||
| Set ( LIBINTERFACE_VERSION "${LIBINTERFACE_VERSION_SHORT}.${LIBINTERFACE_VERSION_PATCH}.${LIBINTERFACE_VERSION_BUILD}" ) | |||||
| Set ( LIBINTERFACE_VERSION_SHORT "${LIBINTERFACE_VERSION_MAJOR}.${LIBINTERFACE_VERSION_MINOR}" ) | |||||
| Set ( LIBINTERFACE_VERSION_COMPLETE "${LIBINTERFACE_VERSION}" ) | |||||
| If ( LIBINTERFACE_VERSION_BEHIND ) | |||||
| Set ( LIBINTERFACE_VERSION_COMPLETE "${LIBINTERFACE_VERSION_COMPLETE}+${LIBINTERFACE_VERSION_BEHIND}" ) | |||||
| EndIf ( ) | |||||
| Set ( LIBINTERFACE_NAME "${LIBINTERFACE_PROJECT_NAME}-${LIBINTERFACE_VERSION_SHORT}" ) | |||||
| Set ( LIBINTERFACE_OUTPUTNAME "${LIBINTERFACE_PROJECT_NAME}" ) | |||||
| String ( SUBSTRING "${LIBINTERFACE_VERSION_HASH}" 0 8 LIBINTERFACE_VERSION_HASH_SHORT ) | |||||
| # Extra | |||||
| If ( LIBINTERFACE_IGNORE_MODULES ) | |||||
| Set ( LIBINTERFACE_FIND_PACKAGE_EXTRA_ARGS "CONFIG" ) | |||||
| EndIf ( ) | |||||
| @@ -1,30 +0,0 @@ | |||||
| # Initialize ###################################################################################### | |||||
| Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) | |||||
| Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) | |||||
| Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) | |||||
| # Interface Library ############################################################################### | |||||
| Set ( LIBINTERFACE_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include ) | |||||
| Add_Library ( libinterface INTERFACE ) | |||||
| Target_Include_Directories ( libinterface | |||||
| INTERFACE | |||||
| $<BUILD_INTERFACE:${LIBINTERFACE_INCLUDE_DIR}> | |||||
| $<INSTALL_INTERFACE:${LIBINTERFACE_INSTALL_DIR_INCLUDE}> ) | |||||
| # Install ######################################################################################### | |||||
| Set ( LIBINTERFACE_HAS_EXPORT False PARENT_SCOPE ) | |||||
| # Header | |||||
| If ( LIBINTERFACE_INSTALL_HEADER ) | |||||
| Set ( LIBINTERFACE_HAS_EXPORT True PARENT_SCOPE ) | |||||
| Install ( FILES ${LIBINTERFACE_INCLUDE_DIR}/libinterface.h | |||||
| DESTINATION ${LIBINTERFACE_INSTALL_DIR_INCLUDE} ) | |||||
| Install ( DIRECTORY ${LIBINTERFACE_INCLUDE_DIR}/libinterface | |||||
| DESTINATION ${LIBINTERFACE_INSTALL_DIR_INCLUDE} ) | |||||
| Install ( TARGETS libinterface | |||||
| EXPORT libinterface | |||||
| DESTINATION ${LIBINTERFACE_INSTALL_DIR_INCLUDE} ) | |||||
| EndIf ( ) | |||||
| @@ -1,4 +1,4 @@ | |||||
| #include <gtest/gtest.h> | |||||
| #include <libinterface/dummy.test.h> | |||||
| #include <libinterface.h> | #include <libinterface.h> | ||||
| @@ -0,0 +1,3 @@ | |||||
| #pragma once | |||||
| #include <gtest/gtest.h> | |||||
| @@ -1,59 +0,0 @@ | |||||
| # Initialize ###################################################################################### | |||||
| Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) | |||||
| Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) | |||||
| Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) | |||||
| Find_Package ( Sanitizers QUIET ) | |||||
| # Test ############################################################################################ | |||||
| Find_Package ( GTest QUIET ) | |||||
| If ( NOT "${GTest_FOUND}" ) | |||||
| Return ( ) | |||||
| EndIf ( ) | |||||
| File ( GLOB_RECURSE LIBINTERFACE_TEST_HEADER_FILES | |||||
| ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) | |||||
| File ( GLOB_RECURSE LIBINTERFACE_TEST_INLINE_FILES | |||||
| ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) | |||||
| File ( GLOB_RECURSE LIBINTERFACE_TEST_SOURCE_FILES | |||||
| RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} | |||||
| ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) | |||||
| ForEach ( FILE IN LISTS LIBINTERFACE_TEST_SOURCE_FILES ) | |||||
| # add test | |||||
| Get_Filename_Component ( TEST_DIR ${FILE} DIRECTORY ) | |||||
| Get_Filename_Component ( TEST_NAME ${FILE} NAME_WE ) | |||||
| Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) | |||||
| String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| String ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" ) | |||||
| Set ( TEST_NAME "test-${TEST_NAME}" ) | |||||
| Add_Executable ( ${TEST_NAME} | |||||
| EXCLUDE_FROM_ALL | |||||
| ${LIBINTERFACE_TEST_HEADER_FILES} | |||||
| ${LIBINTERFACE_TEST_INLINE_FILES} | |||||
| ${FILE} ) | |||||
| Target_Link_Libraries ( ${TEST_NAME} | |||||
| PUBLIC | |||||
| libinterface | |||||
| GTest::Main ) | |||||
| # Sanitizers | |||||
| If ( Sanitizers_FOUND ) | |||||
| Add_Sanitizers ( ${TEST_NAME} ) | |||||
| EndIf ( ) | |||||
| # pedantic | |||||
| If ( HAS_PEDANTIC ) | |||||
| Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) | |||||
| EndIf ( ) | |||||
| # test | |||||
| If ( HAS_CMAKE_TESTS ) | |||||
| Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} GROUP libinterface ) | |||||
| Else ( ) | |||||
| Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) | |||||
| EndIf ( ) | |||||
| EndForEach ( ) | |||||
| @@ -4,7 +4,7 @@ ScriptFile=$(readlink -f "${BASH_SOURCE[0]}") | |||||
| ScriptDir=$(dirname "${ScriptFile}") | ScriptDir=$(dirname "${ScriptFile}") | ||||
| IgnoreVsCodeSettings=1 | IgnoreVsCodeSettings=1 | ||||
| UseGit=1 | |||||
| UseGit=0 | |||||
| Verbose=0 | Verbose=0 | ||||
| Update=0 | Update=0 | ||||
| CMakeModules="" | CMakeModules="" | ||||
| @@ -40,24 +40,24 @@ function PrintHelp() | |||||
| Parameters: | Parameters: | ||||
| -g|--group <directory> | |||||
| -g|--group <group-directory> | |||||
| Create a new project group at the given directory. | Create a new project group at the given directory. | ||||
| -i|--interface <name> <directory> | |||||
| -i|--interface <name> <group-directory> | |||||
| Create a new interface library project with the given name at the given directory. | Create a new interface library project with the given name at the given directory. | ||||
| -l|--library <name> <directory> | |||||
| -l|--library <name> <group-directory> | |||||
| Create a new library project with the given name at the given directory. | Create a new library project with the given name at the given directory. | ||||
| -e|--executable <name> <directory> | |||||
| -e|--executable <name> <group-directory> | |||||
| Create a new executable project with the given name at the given directory. | Create a new executable project with the given name at the given directory. | ||||
| -m|--modules <remote> | -m|--modules <remote> | ||||
| -M|--force-modules <remote> | -M|--force-modules <remote> | ||||
| Add the CMake Modules from the given remote repository as submodule of the new project. | Add the CMake Modules from the given remote repository as submodule of the new project. | ||||
| -n|--nogit | |||||
| Does not initialize a new git repository when creating a new project group. | |||||
| --git | |||||
| Initialize a new git repository when creating a new project or group. | |||||
| -u|--update | -u|--update | ||||
| Update an exsisting project. | Update an exsisting project. | ||||
| @@ -116,22 +116,20 @@ function CreateGroup() | |||||
| # Create git repository | # Create git repository | ||||
| Log " Create git repository" | Log " Create git repository" | ||||
| if [[ $UseGit -eq 1 ]]; then | |||||
| git -C $dir init \ | |||||
| || Panic "Git init failed!" | |||||
| git -C $dir init \ | |||||
| || Panic "Git init failed!" | |||||
| # Add cmake modules | |||||
| Log " Add git submodule for CMake modules" | |||||
| if [[ -n "$CMakeModules" ]]; then | |||||
| git -C $dir submodule add $CMakeModulesForced "$CMakeModules" "cmake/modules" \ | |||||
| || Panic "Git submodule add failed!" | |||||
| # Add cmake modules | |||||
| Log " Add git submodule for CMake modules" | |||||
| if [[ -n "$CMakeModules" ]]; then | |||||
| git -C $dir submodule add $CMakeModulesForced "$CMakeModules" "cmake/modules" \ | |||||
| || Panic "Git submodule add failed!" | |||||
| git -C $dir/cmake/modules fetch --all \ | |||||
| || Panic "Git submodule fetch failed!" | |||||
| git -C $dir/cmake/modules fetch --all \ | |||||
| || Panic "Git submodule fetch failed!" | |||||
| git -C $dir/cmake/modules reset --hard origin/master \ | |||||
| || Panic "Git submodule reset failed!" | |||||
| fi | |||||
| git -C $dir/cmake/modules reset --hard origin/master \ | |||||
| || Panic "Git submodule reset failed!" | |||||
| fi | fi | ||||
| # Copy files | # Copy files | ||||
| @@ -144,7 +142,7 @@ function CreateGroup() | |||||
| || [[ $file == $srcDir/.git/* ]] \ | || [[ $file == $srcDir/.git/* ]] \ | ||||
| || [[ $file == $srcDir/.gitmodules ]] \ | || [[ $file == $srcDir/.gitmodules ]] \ | ||||
| || [[ $file == $srcDir/projects/* ]] \ | || [[ $file == $srcDir/projects/* ]] \ | ||||
| || [[ $file == $srcDir/cmake/modules/* ]] | |||||
| || [[ $file == $srcDir/cmake/* ]] | |||||
| then | then | ||||
| relFile=.${file/$srcDir/} | relFile=.${file/$srcDir/} | ||||
| Verbose " Ignore $relFile" | Verbose " Ignore $relFile" | ||||
| @@ -156,13 +154,6 @@ function CreateGroup() | |||||
| relFile=.${file/$srcDir/} | relFile=.${file/$srcDir/} | ||||
| Verbose " Ignore $relFile" | Verbose " Ignore $relFile" | ||||
| # Ignore git files | |||||
| elif [[ $UseGit -eq 0 ]] \ | |||||
| && [[ $file == $srcDir/.git* ]] | |||||
| then | |||||
| relFile=.${file/$srcDir/} | |||||
| Verbose " Ignore $relFile" | |||||
| # Copy related files | # Copy related files | ||||
| else | else | ||||
| Copy "$srcDir" "$dir" "${file/$srcDir/}" | Copy "$srcDir" "$dir" "${file/$srcDir/}" | ||||
| @@ -173,8 +164,9 @@ function CreateGroup() | |||||
| function CreateProject() | function CreateProject() | ||||
| { | { | ||||
| name="$1" | name="$1" | ||||
| dir="$2" | |||||
| groupdir="$2" | |||||
| src="$3" | src="$3" | ||||
| dir="$groupdir/projects/$name" | |||||
| Log "\nCreate Project $1 in director $2" | Log "\nCreate Project $1 in director $2" | ||||
| # Create directory | # Create directory | ||||
| @@ -214,6 +206,9 @@ function CreateProject() | |||||
| # Copy files | # Copy files | ||||
| Log " Copy files" | Log " Copy files" | ||||
| Copy "$ScriptDir/cmake" "$groupdir/cmake" "/Find$src.cmake" "$src" "$name" | |||||
| srcDir="$ScriptDir/projects/$src" | srcDir="$ScriptDir/projects/$src" | ||||
| for file in $(find $srcDir -type f); do | for file in $(find $srcDir -type f); do | ||||
| @@ -323,8 +318,8 @@ while [ $# -gt 0 ]; do | |||||
| IgnoreVsCodeSettings=0 | IgnoreVsCodeSettings=0 | ||||
| ;; | ;; | ||||
| "-n" | "--nogit" ) | |||||
| UseGit=0 | |||||
| "--git" ) | |||||
| UseGit=1 | |||||
| ;; | ;; | ||||
| "-v" | "--verbose" ) | "-v" | "--verbose" ) | ||||