CMakeLists.txt 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. ####################################################################################################################
  2. ####################################################################################################################
  3. ####################################################################################################################
  4. # General
  5. ####################################################################################################################
  6. ####################################################################################################################
  7. ####################################################################################################################
  8. cmake_minimum_required(VERSION 3.17)
  9. project(ls-math VERSION 2023.1.0)
  10. set(MODULE_NAME_LS_MATH_VECTOR ls-math-vector)
  11. set(GOOGLE_TEST_MODULE googletest-1.11.0)
  12. ##########################################################
  13. # Options
  14. ##########################################################
  15. option(BUILD_LS_MATH_WITH_TESTS "Build project with tests..." OFF)
  16. option(BUILD_LS_MATH_WITH_SUPPORTED_COMPILER "Build project with supported compiler only..." ON)
  17. option(BUILD_LS_MATH_STATIC "Build ls-math static library..." ON)
  18. option(BUILD_LS_MATH_SHARED "Build ls-math shared library..." OFF)
  19. set(TARGET_COUNTER 0)
  20. if (${BUILD_LS_MATH_STATIC})
  21. math(EXPR TARGET_COUNTER "${TARGET_COUNTER} + 1")
  22. set(GOAL "static library")
  23. endif ()
  24. if (${BUILD_LS_MATH_SHARED})
  25. math(EXPR TARGET_COUNTER "${TARGET_COUNTER} + 1")
  26. set(GOAL "shared library")
  27. endif ()
  28. message("${PROJECT_NAME}: [Goal] ${GOAL}")
  29. if (TARGET_COUNTER GREATER 1)
  30. message("${PROJECT_NAME}: [Error] only one goal supported at the same time!")
  31. return()
  32. endif ()
  33. if (TARGET_COUNTER EQUAL 0)
  34. message("${PROJECT_NAME}: [Error] no goal selected!")
  35. return()
  36. endif ()
  37. ##########################################################
  38. # Compiler Settings
  39. ##########################################################
  40. message("${PROJECT_NAME}: Setting compiler flags...")
  41. set(CMAKE_CXX_STANDARD 17)
  42. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
  43. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
  44. ##########################################################
  45. # Compiler Support
  46. ##########################################################
  47. if(${BUILD_LS_MATH_WITH_SUPPORTED_COMPILER})
  48. message("${PROJECT_NAME}: build with compiler support...")
  49. # define supported compilers
  50. if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC OR
  51. ${CMAKE_CXX_COMPILER_ID} STREQUAL GNU OR
  52. ${CMAKE_CXX_COMPILER_ID} STREQUAL ClangOR OR
  53. ${CMAKE_CXX_COMPILER_ID} STREQUAL AppleClang)
  54. message("${PROJECT_NAME}: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} is supported...")
  55. else()
  56. message("${PROJECT_NAME}: [Error] ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} is not supported... terminated!")
  57. return()
  58. endif ()
  59. endif()
  60. ######################################################
  61. # Include Directories
  62. ######################################################
  63. message("${PROJECT_NAME}: Adding include directories...")
  64. if (${BUILD_LS_MATH_WITH_TESTS})
  65. include_directories(${CMAKE_CURRENT_SOURCE_DIR}/test)
  66. include_directories(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE}/googletest/include)
  67. include_directories(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE}/googlemock/include)
  68. endif ()
  69. include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
  70. ######################################################
  71. # Add Other CMake Dependencies
  72. ######################################################
  73. message("${PROJECT_NAME}: Adding additional cmake dependencies...")
  74. if (${BUILD_LS_MATH_WITH_TESTS})
  75. add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE})
  76. endif ()
  77. ####################################################################################################################
  78. ####################################################################################################################
  79. ####################################################################################################################
  80. # Source Files Modularization
  81. ####################################################################################################################
  82. ####################################################################################################################
  83. ####################################################################################################################
  84. set(SOURCE_FILES_LS_MATH_VECTOR
  85. ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-math/vector/Vector2.cpp)
  86. ####################################################################################################################
  87. ####################################################################################################################
  88. ####################################################################################################################
  89. # Test Files Modularization
  90. ####################################################################################################################
  91. ####################################################################################################################
  92. ####################################################################################################################
  93. if (${BUILD_LS_MATH_WITH_TESTS})
  94. set(TEST_FILES_LS_MATH_VECTOR
  95. ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/vector/Vector2Test.cpp)
  96. endif ()
  97. ####################################################################################################################
  98. ####################################################################################################################
  99. ####################################################################################################################
  100. # Test Suite Builds
  101. ####################################################################################################################
  102. ####################################################################################################################
  103. ####################################################################################################################
  104. ##########################################################
  105. # Build Tests (ls-math-vector)
  106. ##########################################################
  107. if (${BUILD_LS_MATH_WITH_TESTS})
  108. message("${MODULE_NAME_LS_MATH_VECTOR}: Building tests...")
  109. add_executable(${MODULE_NAME_LS_MATH_VECTOR}-test ${TEST_FILES_LS_MATH_VECTOR})
  110. endif ()
  111. ####################################################################################################################
  112. ####################################################################################################################
  113. ####################################################################################################################
  114. # Build Library Binaries
  115. ####################################################################################################################
  116. ####################################################################################################################
  117. ####################################################################################################################
  118. ##########################################################
  119. # Build Library (ls-math-vector)
  120. ##########################################################
  121. message("${PROJECT_NAME}: Building ${MODULE_NAME_LS_MATH_VECTOR} library version ${PROJECT_VERSION}...")
  122. if (${BUILD_LS_MATH_STATIC})
  123. add_library("${MODULE_NAME_LS_MATH_VECTOR}" STATIC ${SOURCE_FILES_LS_MATH_VECTOR})
  124. set_target_properties("${MODULE_NAME_LS_MATH_VECTOR}" PROPERTIES DEBUG_POSTFIX "-d")
  125. endif ()
  126. if (${BUILD_LS_MATH_SHARED})
  127. add_library("${MODULE_NAME_LS_MATH_VECTOR}" SHARED ${SOURCE_FILES_LS_MATH_VECTOR})
  128. target_link_libraries("${MODULE_NAME_LS_MATH_VECTOR}" ${MODULE_NAME_CORE})
  129. set_target_properties("${MODULE_NAME_LS_MATH_VECTOR}" PROPERTIES DEBUG_POSTFIX "-d")
  130. endif ()
  131. ####################################################################################################################
  132. ####################################################################################################################
  133. ####################################################################################################################
  134. # Test Suite: Linking
  135. ####################################################################################################################
  136. ####################################################################################################################
  137. ####################################################################################################################
  138. ##########################################################
  139. # Linking (ls-math-vector)
  140. ##########################################################
  141. if (${BUILD_LS_MATH_WITH_TESTS})
  142. message("${MODULE_NAME_LS_MATH_VECTOR}: Linking libraries for test application...")
  143. target_link_libraries(${MODULE_NAME_LS_MATH_VECTOR}-test
  144. gtest
  145. gmock
  146. gtest_main
  147. "${MODULE_NAME_LS_MATH_VECTOR}")
  148. endif ()