|
1 | | -cmake_minimum_required(VERSION 4.0.2) |
| 1 | +set(CMAKE_VERSION_MINIMUM 3.31) |
| 2 | +cmake_minimum_required(VERSION ${CMAKE_VERSION_MINIMUM}) |
| 3 | +message(STATUS "Cmake version: ${CMAKE_VERSION} (>= ${CMAKE_VERSION_MINIMUM} ✓)") |
2 | 4 |
|
3 | | -# https://github.com/Kitware/CMake/blob/master/Help/dev/experimental.rst |
4 | | -set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "a9e1cf81-9932-4810-974b-6eccaf14e457") |
5 | 5 | set(CMAKE_CXX_STANDARD 23) |
6 | | -set(CMAKE_CXX_MODULE_STD 1) |
| 6 | +set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 7 | +set(CMAKE_CXX_EXTENSIONS OFF) |
7 | 8 |
|
8 | | -project(mcpplibs-templates VERSION 1.0.0 LANGUAGES CXX) |
| 9 | +project(mcpplibs-primitives VERSION 1.0.0 LANGUAGES CXX) |
| 10 | + |
| 11 | +find_package(Threads REQUIRED) |
| 12 | + |
| 13 | +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
| 14 | + set(COMPILER_GCC_VERSION_MINIMUM 14.0) |
| 15 | + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${COMPILER_GCC_VERSION_MINIMUM}) |
| 16 | + message(FATAL_ERROR "GCC version too old for C++ Modules.\nGCC version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_GCC_VERSION_MINIMUM} X)") |
| 17 | + else() |
| 18 | + message(STATUS "GCC version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_GCC_VERSION_MINIMUM} ✓)") |
| 19 | + endif() |
| 20 | +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |
| 21 | + set(COMPILER_CLANG_VERSION_MINIMUM 17.0) |
| 22 | + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${COMPILER_CLANG_VERSION_MINIMUM}) |
| 23 | + message(FATAL_ERROR "Clang version too old for C++ Modules.\nClang version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_CLANG_VERSION_MINIMUM} X)") |
| 24 | + else() |
| 25 | + message(STATUS "Clang version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_CLANG_VERSION_MINIMUM} ✓)") |
| 26 | + endif() |
| 27 | +elseif (MSVC) |
| 28 | + set(COMPILER_MSVC_VERSION_MINIMUM 1934) |
| 29 | + if (MSVC_VERSION LESS ${COMPILER_MSVC_VERSION_MINIMUM}) |
| 30 | + message(FATAL_ERROR "MSVC version too old for C++ Modules.\nMSVC version: ${MSVC_VERSION} (>= ${COMPILER_MSVC_VERSION_MINIMUM} X)") |
| 31 | + else() |
| 32 | + message(STATUS "MSVC version: ${MSVC_VERSION} (>= ${COMPILER_MSVC_VERSION_MINIMUM} ✓)") |
| 33 | + endif() |
| 34 | +endif() |
9 | 35 |
|
10 | 36 | # Library |
11 | | -add_library(mcpplibs-templates STATIC) |
| 37 | +add_library(mcpplibs-primitives STATIC) |
12 | 38 |
|
13 | | -file(GLOB_RECURSE MODULE_SOURCES "src/*.cppm") |
| 39 | +file(GLOB_RECURSE CXX_MODULE_FILES |
| 40 | + src/*.cppm |
| 41 | +) |
14 | 42 |
|
15 | | -target_sources(mcpplibs-templates |
| 43 | +target_sources(mcpplibs-primitives |
16 | 44 | PUBLIC |
17 | | - FILE_SET CXX_MODULES FILES |
18 | | - ${MODULE_SOURCES} |
| 45 | + FILE_SET CXX_MODULES TYPE CXX_MODULES FILES |
| 46 | + ${CXX_MODULE_FILES} |
| 47 | + PRIVATE |
| 48 | + src/primitives.cpp |
19 | 49 | ) |
20 | 50 |
|
21 | | -# Test |
22 | | -add_executable(templates_test tests/main.cpp) |
23 | | -target_link_libraries(templates_test PRIVATE mcpplibs-templates) |
| 51 | +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
| 52 | + target_compile_options(mcpplibs-primitives PRIVATE -fmodules-ts) |
| 53 | +endif() |
24 | 54 |
|
25 | | -enable_testing() |
26 | | -add_test(NAME mcpplibs-templates-test COMMAND templates_test) |
| 55 | +target_link_libraries(mcpplibs-primitives PRIVATE Threads::Threads) |
27 | 56 |
|
28 | | -# Example |
| 57 | +target_include_directories(mcpplibs-primitives PUBLIC |
| 58 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> |
| 59 | + $<INSTALL_INTERFACE:include> |
| 60 | +) |
| 61 | + |
| 62 | +# Examples |
29 | 63 | add_executable(basic examples/basic.cpp) |
30 | | -target_link_libraries(basic PRIVATE mcpplibs-templates) |
| 64 | +target_link_libraries(basic PRIVATE mcpplibs-primitives) |
| 65 | + |
| 66 | +# Testing |
| 67 | +option(BUILD_TESTING "Build the testing directories" ON) |
| 68 | + |
| 69 | +if (BUILD_TESTING) |
| 70 | + include(CTest) |
| 71 | + enable_testing() |
| 72 | + add_subdirectory(tests) |
| 73 | +endif() |
0 commit comments