|
1 |
| -cmake_minimum_required(VERSION 3.9) |
2 |
| -project(patterns) |
3 |
| -set(CMAKE_ROOT_) |
| 1 | +cmake_minimum_required(VERSION 3.12.4) |
| 2 | +project("patterns" |
| 3 | + VERSION 0.1.0 |
| 4 | + DESCRIPTION "A header only c++17 library with GoF design patterns" |
| 5 | + HOMEPAGE_URL "https://github.com/svdev/design-patterns-cpp17" |
| 6 | + LANGUAGES CXX) |
4 | 7 |
|
5 | 8 | set(CMAKE_CXX_STANDARD 17)
|
6 | 9 | set(CMAKE_CXX_EXTENSIONS OFF)
|
7 | 10 | set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
8 | 11 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
9 | 12 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
10 | 13 |
|
| 14 | +if(NOT CMAKE_BUILD_TYPE) |
| 15 | + set(CMAKE_BUILD_TYPE "Release" FORCE) |
| 16 | +endif(NOT CMAKE_BUILD_TYPE) |
| 17 | + |
| 18 | +add_library(${PROJECT_NAME} INTERFACE) |
| 19 | +target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_17) |
| 20 | +target_include_directories(${PROJECT_NAME} INTERFACE |
| 21 | + $<BUILD_INTERFACE:${${PROJECT_NAME}_SOURCE_DIR}/include> |
| 22 | + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) |
| 23 | + |
| 24 | +set(CMAKE_ROOT) |
| 25 | +install(TARGETS ${PROJECT_NAME} |
| 26 | + EXPORT ${PROJECT_NAME}_Targets |
| 27 | + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 28 | + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 29 | + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) |
| 30 | + |
| 31 | +include(CMakePackageConfigHelpers) |
| 32 | +write_basic_package_version_file("${PROJECT_NAME}ConfigVersion.cmake" |
| 33 | + VERSION ${PROJECT_VERSION} |
| 34 | + COMPATIBILITY SameMajorVersion) |
| 35 | + |
| 36 | +install(EXPORT ${PROJECT_NAME}_Targets |
| 37 | + FILE ${PROJECT_NAME}Targets.cmake |
| 38 | + NAMESPACE ${PROJECT_NAME}:: |
| 39 | + DESTINATION ${CMAKE_ROOT}/Modules/${PROJECT_NAME}) |
| 40 | + |
| 41 | +install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" |
| 42 | + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" |
| 43 | + DESTINATION ${CMAKE_ROOT}/Modules/${PROJECT_NAME}) |
| 44 | + |
| 45 | +file(GLOB PATTERN_HEADERS |
| 46 | + ${PROJECT_SOURCE_DIR}/include/**/*.hpp |
| 47 | + ${PROJECT_SOURCE_DIR}/include/*.hpp) |
| 48 | + |
| 49 | +foreach(FILE ${PATTERN_HEADERS}) |
| 50 | + get_filename_component(DIR ${FILE} DIRECTORY) |
| 51 | + file(RELATIVE_PATH REL ${PROJECT_SOURCE_DIR}/include ${DIR}) |
| 52 | + install(FILES ${FILE} DESTINATION include/${PROJECT_NAME}/${REL}) |
| 53 | +endforeach() |
| 54 | + |
11 | 55 | include_directories(include)
|
12 | 56 |
|
13 |
| -add_subdirectory(lib/googletest) |
| 57 | +# EXCLUDE_FROM_ALL disables install targets for googletest subdirectory. |
| 58 | +add_subdirectory(lib/googletest EXCLUDE_FROM_ALL) |
14 | 59 | add_subdirectory(test)
|
15 |
| - |
16 |
| -option(USE_CLANG "Build using Clang++" ON) |
17 |
| -if (USE_CLANG) |
18 |
| - set(CMAKE_CXX_COMPILER clang++) |
19 |
| -endif(USE_CLANG) |
|
0 commit comments