cmake.log (40.7 KB)
My CMakeLists.txt
:
cmake_minimum_required(VERSION 4.0)
if(APPLE)
set(CMAKE_CXX_COMPILER /usr/local/bin/g++-15)
# set(LLVM_ROOT /usr/local/Cellar/llvm/20.1.6)
# set(CMAKE_CXX_COMPILER ${LLVM_ROOT}/bin/clang++)
# add_link_options(-L${LLVM_ROOT}/lib/c++)
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
add_compile_options(-stdlib=libc++)
add_link_options(-stdlib=libc++)
endif()
set(CMAKE_CXX_STANDARD 26)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)
set(CMAKE_SKIP_TEST_ALL_DEPENDENCY FALSE)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(CMAKE_VERSION VERSION_LESS 4.0.3)
# cmake v4.0.2:
set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD a9e1cf81-9932-4810-974b-6eccaf14e457)
else()
# cmake release branch
set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD d0edc3af-4c50-42ea-a356-e2862fe7a444)
endif()
set(CMAKE_CXX_MODULE_STD ON)
# Ensure non-empty default build type for single-config
get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(NOT isMultiConfig)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type")
endif()
set(CMAKE_DEBUG_POSTFIX _debug)
project(example-modules VERSION 0.1.0 LANGUAGES CXX)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE)
add_library(Algo SHARED)
target_sources(
Algo
PRIVATE algo-impl.cpp
PUBLIC FILE_SET CXX_MODULES FILES algo-interface.cppm
)
target_compile_features(Algo PUBLIC cxx_std_23)
include(GenerateExportHeader)
generate_export_header(Algo)
target_sources(
Algo
PUBLIC
FILE_SET HEADERS
BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR}
FILES ${CMAKE_CURRENT_BINARY_DIR}/algo_export.h
)
add_executable(algo-example algo-example.cpp)
target_link_libraries(algo-example PRIVATE Algo)
enable_testing()
add_test(NAME algo-example COMMAND algo-example)
include(GNUInstallDirs)
install(
TARGETS Algo
EXPORT Algo
FILE_SET HEADERS
FILE_SET CXX_MODULES
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/my_package/src
CXX_MODULES_BMI
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/my_package/bmi-$<CONFIG>
# Other things to install
)
install(
EXPORT Algo
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/my_package
FILE algo-targets.cmake
NAMESPACE Algo
CXX_MODULES_DIRECTORY
algo
)