* Updated format of cmake files * Added support for sanitizersmaster
@@ -0,0 +1,6 @@ | |||
{ | |||
"files.trimTrailingWhitespace": true, | |||
"files.trimFinalNewlines": true, | |||
"files.insertFinalNewline": true, | |||
"files.eol": "\n" | |||
} |
@@ -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> ) |
@@ -0,0 +1 @@ | |||
TODO: write a docu :) |
@@ -1 +1 @@ | |||
Subproject commit 4953cd4cc849afdfa02a6057b5a2011fb62e91a6 | |||
Subproject commit 94b9877d65e46c9d8169ebc46f163d02e4d9dcf3 |
@@ -0,0 +1,6 @@ | |||
{ | |||
"files.trimTrailingWhitespace": true, | |||
"files.trimFinalNewlines": true, | |||
"files.insertFinalNewline": true, | |||
"files.eol": "\n" | |||
} |
@@ -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 ) |
@@ -0,0 +1,3 @@ | |||
# helloworld | |||
Readme of the project. |
@@ -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 ) |
@@ -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 ) |
@@ -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 ( ) |
@@ -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 ( ) |
@@ -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 ( ) |
@@ -0,0 +1,6 @@ | |||
{ | |||
"files.trimTrailingWhitespace": true, | |||
"files.trimFinalNewlines": true, | |||
"files.insertFinalNewline": true, | |||
"files.eol": "\n" | |||
} |
@@ -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 ) |
@@ -0,0 +1,3 @@ | |||
# libhelloworld | |||
Readme of the project. |
@@ -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 ) |
@@ -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 ) |
@@ -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 ( ) |
@@ -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 ( ) |
@@ -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 ( ) |
@@ -0,0 +1,6 @@ | |||
{ | |||
"files.trimTrailingWhitespace": true, | |||
"files.trimFinalNewlines": true, | |||
"files.insertFinalNewline": true, | |||
"files.eol": "\n" | |||
} |
@@ -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 ) |
@@ -0,0 +1,3 @@ | |||
# libinterface | |||
Readme of the project. |
@@ -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 ) |
@@ -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 ) |
@@ -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 ( ) |
@@ -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 ( ) |
@@ -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 ( ) |
@@ -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 | |||
;; | |||