Browse Source

* Added VS code settings

* Updated format of cmake files
* Added support for sanitizers
master
bergmann 4 years ago
parent
commit
ddaa5367d3
29 changed files with 688 additions and 553 deletions
  1. +6
    -0
      .vscode/settings.json
  2. +17
    -18
      CMakeLists.txt
  3. +1
    -0
      README.md
  4. +1
    -1
      cmake/modules
  5. +6
    -0
      projects/helloworld/.vscode/settings.json
  6. +23
    -23
      projects/helloworld/CMakeLists.txt
  7. +3
    -0
      projects/helloworld/README.md
  8. +15
    -15
      projects/helloworld/cmake/helloworld-const.cmake
  9. +9
    -9
      projects/helloworld/cmake/helloworld-options.cmake
  10. +27
    -21
      projects/helloworld/cmake/helloworld-var.cmake
  11. +52
    -44
      projects/helloworld/src/CMakeLists.txt
  12. +47
    -40
      projects/helloworld/test/CMakeLists.txt
  13. +6
    -0
      projects/libhelloworld/.vscode/settings.json
  14. +49
    -49
      projects/libhelloworld/CMakeLists.txt
  15. +3
    -0
      projects/libhelloworld/README.md
  16. +17
    -17
      projects/libhelloworld/cmake/libhelloworld-const.cmake
  17. +21
    -21
      projects/libhelloworld/cmake/libhelloworld-options.cmake
  18. +27
    -21
      projects/libhelloworld/cmake/libhelloworld-var.cmake
  19. +79
    -72
      projects/libhelloworld/src/CMakeLists.txt
  20. +47
    -40
      projects/libhelloworld/test/CMakeLists.txt
  21. +6
    -0
      projects/libinterface/.vscode/settings.json
  22. +49
    -49
      projects/libinterface/CMakeLists.txt
  23. +3
    -0
      projects/libinterface/README.md
  24. +17
    -17
      projects/libinterface/cmake/libinterface-const.cmake
  25. +9
    -9
      projects/libinterface/cmake/libinterface-options.cmake
  26. +27
    -21
      projects/libinterface/cmake/libinterface-var.cmake
  27. +20
    -20
      projects/libinterface/src/CMakeLists.txt
  28. +47
    -40
      projects/libinterface/test/CMakeLists.txt
  29. +54
    -6
      tool

+ 6
- 0
.vscode/settings.json View File

@@ -0,0 +1,6 @@
{
"files.trimTrailingWhitespace": true,
"files.trimFinalNewlines": true,
"files.insertFinalNewline": true,
"files.eol": "\n"
}

+ 17
- 18
CMakeLists.txt View File

@@ -1,30 +1,29 @@
# 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 )
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/" )
If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" )
Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/" )
EndIf ( )

EndIf ( )
If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" )
Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" )

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
Include ( CTest )
Include ( GNUInstallDirs )
Include ( CTest )
Include ( GNUInstallDirs )

# Projects ########################################################################################

Message ( WARNING "Please configure the subprojects of this project group!" )
# Find_Package ( <package> )
Message ( WARNING "Please configure the subprojects of this project group!" )
# Find_Package ( <package> )

+ 1
- 0
README.md View File

@@ -0,0 +1 @@
TODO: write a docu :)

+ 1
- 1
cmake/modules

@@ -1 +1 @@
Subproject commit 4953cd4cc849afdfa02a6057b5a2011fb62e91a6
Subproject commit 94b9877d65e46c9d8169ebc46f163d02e4d9dcf3

+ 6
- 0
projects/helloworld/.vscode/settings.json View File

@@ -0,0 +1,6 @@
{
"files.trimTrailingWhitespace": true,
"files.trimFinalNewlines": true,
"files.insertFinalNewline": true,
"files.eol": "\n"
}

+ 23
- 23
projects/helloworld/CMakeLists.txt View File

@@ -1,34 +1,34 @@
# 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 )
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/" )
Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" )
EndIf ( )
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 #########################################################################################

Include ( CTest )
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 ( 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 )
Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src )
Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test )

+ 3
- 0
projects/helloworld/README.md View File

@@ -0,0 +1,3 @@
# helloworld

Readme of the project.

+ 15
- 15
projects/helloworld/cmake/helloworld-const.cmake View File

@@ -1,26 +1,26 @@
# This file contains constant variables that are fixed to this project

# 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_HASH "" )
Set ( HELLOWORLD_VERSION_BEHIND 0 )
Set ( HELLOWORLD_VERSION_DIRTY 0 )

# 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 ( ${CMAKE_CURRENT_LIST_DIR}/helloworld-var.cmake )
Include ( ${CMAKE_CURRENT_LIST_DIR}/helloworld-var.cmake )

# Install directories
Set ( HELLOWORLD_INSTALL_DIR_BIN "${CMAKE_INSTALL_BINDIR}" )
Set ( HELLOWORLD_INSTALL_DIR_BIN "${CMAKE_INSTALL_BINDIR}" )

# 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 17 )
Set ( CMAKE_C_STANDARD_REQUIRED ON )
Set ( CMAKE_CXX_STANDARD_REQUIRED ON )

+ 9
- 9
projects/helloworld/cmake/helloworld-options.cmake View File

@@ -1,11 +1,11 @@
# 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 )

+ 27
- 21
projects/helloworld/cmake/helloworld-var.cmake View File

@@ -1,26 +1,32 @@
# This file contains generated variables that are needed for the project

# 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
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_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 ( )

+ 52
- 44
projects/helloworld/src/CMakeLists.txt View File

@@ -1,65 +1,73 @@
# Initialize ######################################################################################

Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE )
Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC )
Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS )
Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE )
Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC )
Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS )

Message ( WARNING "Please configure the dependencies of this project!" )
Find_Package ( libhelloworld REQUIRED )
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 )
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 )
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 ( )
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 ( )
If ( HAS_COTIRE )
Cotire ( helloworld-objects )
Cotire ( helloworld )
EndIf ( )

# Install #########################################################################################

# Executable
Install ( TARGETS helloworld
DESTINATION ${HELLOWORLD_INSTALL_DIR_BIN} )
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 ( )
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 ( )

+ 47
- 40
projects/helloworld/test/CMakeLists.txt View File

@@ -1,52 +1,59 @@
# 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 ( 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 )
If ( NOT "${GTest_FOUND}" )
Return ( )
EndIf ( )
Find_Package ( GTest )
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 )
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 )
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 )
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 ( )
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} )
Else ( )
Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
EndIf ( )
EndForEach ( )
If ( HAS_CMAKE_TESTS )
Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} )
Else ( )
Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
EndIf ( )
EndForEach ( )

+ 6
- 0
projects/libhelloworld/.vscode/settings.json View File

@@ -0,0 +1,6 @@
{
"files.trimTrailingWhitespace": true,
"files.trimFinalNewlines": true,
"files.insertFinalNewline": true,
"files.eol": "\n"
}

+ 49
- 49
projects/libhelloworld/CMakeLists.txt View File

@@ -1,63 +1,63 @@
# 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 )
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/" )
Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" )
EndIf ( )
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 #########################################################################################

Include ( CTest )
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 ( 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 )
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
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"
"${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config-version.cmake"
DESTINATION
${ConfigPackageLocation}
COMPONENT
Devel )
@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 )

+ 3
- 0
projects/libhelloworld/README.md View File

@@ -0,0 +1,3 @@
# libhelloworld

Readme of the project.

+ 17
- 17
projects/libhelloworld/cmake/libhelloworld-const.cmake View File

@@ -1,28 +1,28 @@
# This file contains constant variables that are fixed to this project

# 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_HASH "" )
Set ( LIBHELLOWORLD_VERSION_BEHIND 0 )
Set ( LIBHELLOWORLD_VERSION_DIRTY 0 )

# 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 ( ${CMAKE_CURRENT_LIST_DIR}/libhelloworld-var.cmake )
Include ( ${CMAKE_CURRENT_LIST_DIR}/libhelloworld-var.cmake )

# 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_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${LIBHELLOWORLD_NAME}" )
Set ( LIBHELLOWORLD_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" )
Set ( LIBHELLOWORLD_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${LIBHELLOWORLD_NAME}" )

# 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 17 )
Set ( CMAKE_C_STANDARD_REQUIRED ON )
Set ( CMAKE_CXX_STANDARD_REQUIRED ON )

+ 21
- 21
projects/libhelloworld/cmake/libhelloworld-options.cmake View File

@@ -1,23 +1,23 @@
# 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 )

+ 27
- 21
projects/libhelloworld/cmake/libhelloworld-var.cmake View File

@@ -1,26 +1,32 @@
# This file contains generated variables that are needed for the project

# 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
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_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 ( )

+ 79
- 72
projects/libhelloworld/src/CMakeLists.txt View File

@@ -1,100 +1,107 @@
# Initialize ######################################################################################

Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE )
Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC )
Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS )
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}> )
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}> )
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}> )
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 ( )
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 ( )
If ( HAS_COTIRE )
Cotire ( libhelloworld-objects )
Cotire ( libhelloworld-static )
Cotire ( libhelloworld-shared )
EndIf ( )

# Install #########################################################################################

Set ( LIBHELLOWORLD_HAS_EXPORT False PARENT_SCOPE )
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 ( )
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 ( )
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 ( )
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 ( )
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 ( )

+ 47
- 40
projects/libhelloworld/test/CMakeLists.txt View File

@@ -1,52 +1,59 @@
# 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 ( 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 )
If ( NOT "${GTest_FOUND}" )
Return ( )
EndIf ( )
Find_Package ( GTest )
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 )
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 )
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 )
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 ( )
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} )
Else ( )
Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
EndIf ( )
EndForEach ( )
If ( HAS_CMAKE_TESTS )
Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} )
Else ( )
Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
EndIf ( )
EndForEach ( )

+ 6
- 0
projects/libinterface/.vscode/settings.json View File

@@ -0,0 +1,6 @@
{
"files.trimTrailingWhitespace": true,
"files.trimFinalNewlines": true,
"files.insertFinalNewline": true,
"files.eol": "\n"
}

+ 49
- 49
projects/libinterface/CMakeLists.txt View File

@@ -1,63 +1,63 @@
# 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 )
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/" )
Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" )
EndIf ( )
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 #########################################################################################

Include ( CTest )
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 ( 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 )
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
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"
"${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config-version.cmake"
DESTINATION
${ConfigPackageLocation}
COMPONENT
Devel )
@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 )

+ 3
- 0
projects/libinterface/README.md View File

@@ -0,0 +1,3 @@
# libinterface

Readme of the project.

+ 17
- 17
projects/libinterface/cmake/libinterface-const.cmake View File

@@ -1,28 +1,28 @@
# This file contains constant variables that are fixed to this project

# 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_HASH "" )
Set ( LIBINTERFACE_VERSION_BEHIND 0 )
Set ( LIBINTERFACE_VERSION_DIRTY 0 )

# 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 ( ${CMAKE_CURRENT_LIST_DIR}/libinterface-var.cmake )
Include ( ${CMAKE_CURRENT_LIST_DIR}/libinterface-var.cmake )

# 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_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${LIBINTERFACE_NAME}" )
Set ( LIBINTERFACE_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" )
Set ( LIBINTERFACE_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${LIBINTERFACE_NAME}" )

# 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 17 )
Set ( CMAKE_C_STANDARD_REQUIRED ON )
Set ( CMAKE_CXX_STANDARD_REQUIRED ON )

+ 9
- 9
projects/libinterface/cmake/libinterface-options.cmake View File

@@ -1,11 +1,11 @@
# 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 )

+ 27
- 21
projects/libinterface/cmake/libinterface-var.cmake View File

@@ -1,26 +1,32 @@
# This file contains generated variables that are needed for the project

# 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
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_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 ( )

+ 20
- 20
projects/libinterface/src/CMakeLists.txt View File

@@ -1,30 +1,30 @@
# Initialize ######################################################################################

Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE )
Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC )
Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS )
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}> )
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 )
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 ( )
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 ( )

+ 47
- 40
projects/libinterface/test/CMakeLists.txt View File

@@ -1,52 +1,59 @@
# 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 ( 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 )
If ( NOT "${GTest_FOUND}" )
Return ( )
EndIf ( )
Find_Package ( GTest )
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 )
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 )
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 )
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 ( )
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} )
Else ( )
Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
EndIf ( )
EndForEach ( )
If ( HAS_CMAKE_TESTS )
Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} )
Else ( )
Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
EndIf ( )
EndForEach ( )

+ 54
- 6
tool View File

@@ -3,6 +3,7 @@
ScriptFile=$(readlink -f "${BASH_SOURCE[0]}")
ScriptDir=$(dirname "${ScriptFile}")

IgnoreVsCodeSettings=1
UseGit=1
Verbose=0
Update=0
@@ -48,7 +49,7 @@ Parameters:
-l|--library <name> <directory>
Create a new library project with the given name at the given directory.

-e|--executable <name ><directory>
-e|--executable <name> <directory>
Create a new executable project with the given name at the given directory.

-m|--modules <remote>
@@ -61,6 +62,9 @@ Parameters:
-u|--update
Update an exsisting project.

-s|--vscode
Add default settings for visual studio code

-v|--verbose
Print extra debug output.

@@ -121,6 +125,12 @@ function CreateGroup()
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 reset --hard origin/master \
|| Panic "Git submodule reset failed!"
fi
fi

@@ -128,21 +138,32 @@ function CreateGroup()
Log " Copy files"
srcDir="$ScriptDir"
for file in $(find $srcDir -type f); do
# Ignore unrelated files
if [[ $file == $ScriptFile ]] \
|| [[ $file == $srcDir/build/* ]] \
|| [[ $file == $srcDir/.git/* ]] \
|| [[ $file == $srcDir/.gitmodules ]] \
|| [[ $file == $srcDir/.vscode/* ]] \
|| [[ $file == $srcDir/projects/* ]] \
|| [[ $file == $srcDir/cmake/modules/* ]]
then
relFile=.${file/$srcDir/}
Verbose " Ignore $relFile"

# Ignore .vscode settings
elif [[ IgnoreVsCodeSettings -eq 1 ]] \
&& [[ $file == $srcDir/.vscode/* ]]
then
relFile=.${file/$srcDir/}
Verbose " Ignore $relFile"

# Ignore git files
elif [[ $UseGit -eq 0 ]] \
&& [[ $file == $srcDir/.git* ]]
then
relFile=.${file/$srcDir/}
Verbose " Ignore $relFile"

# Copy related files
else
Copy "$srcDir" "$dir" "${file/$srcDir/}"
fi
@@ -161,17 +182,33 @@ function CreateProject()
mkdir -p "$dir" \
|| Panic "Unable to create directory: $dir!"

# Create git repository
Log " Create git repository"
if [[ $UseGit -eq 1 ]]; then
# Create/Update git repository
if [[ $Update -eq 1 ]]; then
if [[ -e "$dir/cmake/modules/.git" ]]; then
Log " Update git submodule for CMake modules"
git -C "$dir/cmake/modules" fetch origin \
|| Panic "Unable to fetch cmake module!"
git -C "$dir/cmake/modules" checkout master \
|| Panic "Unable to checkout cmake module!"
git -C "$dir/cmake/modules" reset --hard origin/master \
|| Panic "Unable to reset cmake module!"
fi
elif [[ $UseGit -eq 1 ]]; then
Log " Create git repository"
git -C $dir init \
|| Panic "Git init failed!"

# Add cmake modules
Log " Add git submodule for CMake modules"
if [[ -n "$CMakeModules" ]]; then
Log " Add git submodule for CMake modules"
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 reset --hard origin/master \
|| Panic "Git submodule reset failed!"
fi
fi

@@ -191,6 +228,13 @@ function CreateProject()
relFile=.${file/$srcDir/}
Verbose " Ignore $relFile"

# Ignore .vscode settings
elif [[ IgnoreVsCodeSettings -eq 1 ]] \
&& [[ $file == $srcDir/.vscode/* ]]
then
relFile=.${file/$srcDir/}
Verbose " Ignore $relFile"

# ignore git files
elif [[ $UseGit -eq 0 ]] \
&& [[ $file == $srcDir/.git* ]]
@@ -275,6 +319,10 @@ while [ $# -gt 0 ]; do
Update=1
;;

"-s" | "--vscode")
IgnoreVsCodeSettings=0
;;

"-n" | "--nogit" )
UseGit=0
;;


Loading…
Cancel
Save