#################################################################################################################### #################################################################################################################### #################################################################################################################### # General #################################################################################################################### #################################################################################################################### #################################################################################################################### cmake_minimum_required(VERSION 3.17) project(ls-math VERSION 2023.1.0) set(MODULE_NAME_LS_MATH_VECTOR ls-math-vector) set(GOOGLE_TEST_MODULE googletest-1.11.0) ########################################################## # Options ########################################################## option(BUILD_LS_MATH_WITH_TESTS "Build project with tests..." OFF) option(BUILD_LS_MATH_WITH_SUPPORTED_COMPILER "Build project with supported compiler only..." ON) option(BUILD_LS_MATH_STATIC "Build ls-math static library..." ON) option(BUILD_LS_MATH_SHARED "Build ls-math shared library..." OFF) set(TARGET_COUNTER 0) if (${BUILD_LS_MATH_STATIC}) math(EXPR TARGET_COUNTER "${TARGET_COUNTER} + 1") set(GOAL "static library") endif () if (${BUILD_LS_MATH_SHARED}) math(EXPR TARGET_COUNTER "${TARGET_COUNTER} + 1") set(GOAL "shared library") endif () message("${PROJECT_NAME}: [Goal] ${GOAL}") if (TARGET_COUNTER GREATER 1) message("${PROJECT_NAME}: [Error] only one goal supported at the same time!") return() endif () if (TARGET_COUNTER EQUAL 0) message("${PROJECT_NAME}: [Error] no goal selected!") return() endif () ########################################################## # Compiler Settings ########################################################## message("${PROJECT_NAME}: Setting compiler flags...") set(CMAKE_CXX_STANDARD 17) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") ########################################################## # Compiler Support ########################################################## if(${BUILD_LS_MATH_WITH_SUPPORTED_COMPILER}) message("${PROJECT_NAME}: build with compiler support...") # define supported compilers if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC OR ${CMAKE_CXX_COMPILER_ID} STREQUAL GNU OR ${CMAKE_CXX_COMPILER_ID} STREQUAL ClangOR OR ${CMAKE_CXX_COMPILER_ID} STREQUAL AppleClang) message("${PROJECT_NAME}: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} is supported...") else() message("${PROJECT_NAME}: [Error] ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} is not supported... terminated!") return() endif () endif() ###################################################### # Include Directories ###################################################### message("${PROJECT_NAME}: Adding include directories...") if (${BUILD_LS_MATH_WITH_TESTS}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/test) include_directories(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE}/googletest/include) include_directories(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE}/googlemock/include) endif () include_directories(${CMAKE_CURRENT_LIST_DIR}/include) ###################################################### # Add Other CMake Dependencies ###################################################### message("${PROJECT_NAME}: Adding additional cmake dependencies...") if (${BUILD_LS_MATH_WITH_TESTS}) add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE}) endif () #################################################################################################################### #################################################################################################################### #################################################################################################################### # Source Files Modularization #################################################################################################################### #################################################################################################################### #################################################################################################################### set(SOURCE_FILES_LS_MATH_VECTOR ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-math/vector/Vector2.cpp) #################################################################################################################### #################################################################################################################### #################################################################################################################### # Test Files Modularization #################################################################################################################### #################################################################################################################### #################################################################################################################### if (${BUILD_LS_MATH_WITH_TESTS}) set(TEST_FILES_LS_MATH_VECTOR ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/vector/Vector2Test.cpp) endif () #################################################################################################################### #################################################################################################################### #################################################################################################################### # Test Suite Builds #################################################################################################################### #################################################################################################################### #################################################################################################################### ########################################################## # Build Tests (ls-math-vector) ########################################################## if (${BUILD_LS_MATH_WITH_TESTS}) message("${MODULE_NAME_LS_MATH_VECTOR}: Building tests...") add_executable(${MODULE_NAME_LS_MATH_VECTOR}-test ${TEST_FILES_LS_MATH_VECTOR}) endif () #################################################################################################################### #################################################################################################################### #################################################################################################################### # Build Library Binaries #################################################################################################################### #################################################################################################################### #################################################################################################################### ########################################################## # Build Library (ls-math-vector) ########################################################## message("${PROJECT_NAME}: Building ${MODULE_NAME_LS_MATH_VECTOR} library version ${PROJECT_VERSION}...") if (${BUILD_LS_MATH_STATIC}) add_library("${MODULE_NAME_LS_MATH_VECTOR}" STATIC ${SOURCE_FILES_LS_MATH_VECTOR}) set_target_properties("${MODULE_NAME_LS_MATH_VECTOR}" PROPERTIES DEBUG_POSTFIX "-d") endif () if (${BUILD_LS_MATH_SHARED}) add_library("${MODULE_NAME_LS_MATH_VECTOR}" SHARED ${SOURCE_FILES_LS_MATH_VECTOR}) target_link_libraries("${MODULE_NAME_LS_MATH_VECTOR}" ${MODULE_NAME_CORE}) set_target_properties("${MODULE_NAME_LS_MATH_VECTOR}" PROPERTIES DEBUG_POSTFIX "-d") endif () #################################################################################################################### #################################################################################################################### #################################################################################################################### # Test Suite: Linking #################################################################################################################### #################################################################################################################### #################################################################################################################### ########################################################## # Linking (ls-math-vector) ########################################################## if (${BUILD_LS_MATH_WITH_TESTS}) message("${MODULE_NAME_LS_MATH_VECTOR}: Linking libraries for test application...") target_link_libraries(${MODULE_NAME_LS_MATH_VECTOR}-test gtest gmock gtest_main "${MODULE_NAME_LS_MATH_VECTOR}") endif ()