CMakeLists.txt 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. cmake_minimum_required(VERSION 3.8)
  2. #########################################################
  3. project(gul VERSION 1.0.0)
  4. #########################################################
  5. get_directory_property( _is_sub_project PARENT_DIRECTORY)
  6. if(_is_sub_project)
  7. option( ${PROJECT_NAME}_ENABLE_COVERAGE "Enable Coverage." FALSE)
  8. option( ${PROJECT_NAME}_ENABLE_WARNINGS "Enable Strict Warnings" FALSE)
  9. option( ${PROJECT_NAME}_ENABLE_TESTING "Enable Unit Tests" FALSE)
  10. else()
  11. option( ${PROJECT_NAME}_ENABLE_COVERAGE "Enable Coverage." TRUE)
  12. option( ${PROJECT_NAME}_ENABLE_WARNINGS "Enable Strict Warnings" TRUE)
  13. option( ${PROJECT_NAME}_ENABLE_TESTING "Enable Unit Tests" TRUE)
  14. #########################################################
  15. include(cmake/StandardProjectSettings.cmake)
  16. include(cmake/CompilerWarnings.cmake)
  17. include(cmake/Coverage.cmake)
  18. #########################################################
  19. #########################################################
  20. # Other targets
  21. #########################################################
  22. add_custom_target( ${PROJECT_NAME}_other_files
  23. SOURCES
  24. # .travis/install.sh
  25. # .travis/build.sh
  26. README.md
  27. # LICENSE
  28. .gitlab-ci.yml
  29. # .travis.yml
  30. conanfile.txt
  31. appveyor.yml
  32. cmake/CompilerWarnings.cmake
  33. cmake/Coverage.cmake
  34. )
  35. #########################################################
  36. endif()
  37. #########################################################
  38. # Create an interface library so that we can link to
  39. # The proper configurations.
  40. #
  41. # Any target that wants to use gnl should link to
  42. # ABC::ABC. eg:
  43. #
  44. # target_link_libraries(myexe ABC::ABC)
  45. #
  46. #########################################################
  47. set(lib_name ${PROJECT_NAME})
  48. set(lib_alias ${PROJECT_NAME}::${PROJECT_NAME})
  49. add_library( ${lib_name} INTERFACE)
  50. add_library( ${lib_alias} ALIAS ${lib_name} )
  51. target_compile_features( ${lib_name}
  52. INTERFACE
  53. cxx_std_17
  54. )
  55. target_include_directories( ${lib_name}
  56. INTERFACE
  57. "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
  58. "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/generated_headers>"
  59. )
  60. if( ${PROJECT_NAME}_ENABLE_COVERAGE )
  61. set_coverage_flags(${lib_name})
  62. endif()
  63. if( ${PROJECT_NAME}_ENABLE_WARNINGS )
  64. set_project_warnings(${lib_name})
  65. endif()
  66. #########################################################
  67. if( _is_sub_project )
  68. else()
  69. #########################################################
  70. enable_testing()
  71. add_subdirectory(test)
  72. #########################################################
  73. endif()