diff --git a/CMakeLists.txt b/CMakeLists.txt index ba9daae6..58988be6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,6 +99,15 @@ function(add_module_library name) # `std` is affected by CMake options and may be higher than C++20. get_target_property(std ${name} CXX_STANDARD) + # Respect CMAKE_CXX_EXTENSIONS when forming the -std flag used to + # precompile modules. A mismatch between -std=gnu++ and -std=c++ + # can cause "configuration mismatch" errors when loading .pcm files. + if (CMAKE_CXX_EXTENSIONS) + set(std_flag "-std=gnu++${std}") + else() + set(std_flag "-std=c++${std}") + endif() + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(pcms) foreach (src ${sources}) @@ -115,9 +124,9 @@ function(add_module_library name) add_custom_command( OUTPUT ${pcm} COMMAND ${CMAKE_CXX_COMPILER} - -std=c++${std} -x c++-module --precompile -c - -o ${pcm} ${CMAKE_CURRENT_SOURCE_DIR}/${src} - "-I$,;-I>" + ${std_flag} -x c++-module --precompile -c + -o ${pcm} ${CMAKE_CURRENT_SOURCE_DIR}/${src} + "-I$,;-I>" # Required by the -I generator expression above. COMMAND_EXPAND_LISTS DEPENDS ${src}) @@ -132,8 +141,9 @@ function(add_module_library name) set(sources ${sources} ${pcm} ${CMAKE_CURRENT_BINARY_DIR}/${obj}) add_custom_command( OUTPUT ${obj} - COMMAND ${CMAKE_CXX_COMPILER} $ - -c -o ${obj} ${pcm} + COMMAND ${CMAKE_CXX_COMPILER} ${std_flag} -c -o ${obj} ${pcm} + "-I$,;-I>" + COMMAND_EXPAND_LISTS DEPENDS ${pcm}) endforeach () endif ()