From eb6fa7a104f5cfd6f71f4ac511f455f61179ba77 Mon Sep 17 00:00:00 2001 From: Fries Date: Thu, 22 Jun 2023 21:45:18 -0700 Subject: [PATCH] add support to build without modules some compilers don't fully support modules with the way cmake does them. it seems like only Clang 16 supports them which is not in the arch repos yet. --- CMakeLists.txt | 32 +++++++++++++++++++------------- src/CMakeLists.txt | 10 +++++++--- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 46210d3..b43dda8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,23 +1,29 @@ cmake_minimum_required(VERSION 3.26) project(LearningProject CXX) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(CMAKE_CXX_STANDARD 20) -if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - string(CONCAT CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE - " " - " -MT -MD -MF " - " ${flags_to_scan_deps} -fdep-file= -fdep-output=" - ) +option(BUILD_WITH_MODULES "Build with C++ Modules" ON) - set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "gcc") - set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG - "${compiler_flags_for_module_map} -fmodule-mapper=") +if(BUILD_WITH_MODULES) + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + string(CONCAT CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE + " " + " -MT -MD -MF " + " ${flags_to_scan_deps} -fdep-file= -fdep-output=" + ) + + set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "gcc") + set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG + "${compiler_flags_for_module_map} -fmodule-mapper=") + endif() + + set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) + set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a") + set(CMAKE_CXX_EXTENSIONS OFF) endif() -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) -set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a") -set(CMAKE_CXX_EXTENSIONS OFF) + add_subdirectory(src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index af57750..4aad8cf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,8 +1,12 @@ -add_subdirectory(math) +if (BUILD_WITH_MODULES) + add_subdirectory(math) +endif() add_executable(hello hello.cc) -add_executable(sqrt sqrt.cc) -target_link_libraries(sqrt PRIVATE Math) +if (BUILD_WITH_MODULES) + add_executable(sqrt sqrt.cc) + target_link_libraries(sqrt PRIVATE Math) +endif() add_executable(inheritance inheritance.cc) add_executable(enumerations enumerations.cc) add_executable(namespaces namespaces.cc)