Last active
January 6, 2022 05:27
-
-
Save Harold2017/84f4bdbc4fa9be2eaf69db60234a6d14 to your computer and use it in GitHub Desktop.
cmake for MSVC on C++20 modules build
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cmake_minimum_required(VERSION 3.16) | |
project(Cpp20) | |
set(CMAKE_CXX_STANDARD 20) | |
set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
set(CMAKE_CXX_EXTENSIONS OFF) | |
set(PREBUILT_MODULE_DIR ${CMAKE_BINARY_DIR}/modules) | |
set(STD_MODULES_DIR "D:/MSVC/VC/Tools/MSVC/14.29.30133/ifc/x64") # macro "$(VC_IFCPath)" in MSVC | |
# https://devblogs.microsoft.com/cppblog/using-cpp-modules-in-msvc-from-the-command-line-part-1/ | |
function(add_module name) | |
file(MAKE_DIRECTORY ${PREBUILT_MODULE_DIR}) | |
add_custom_target(${name}.ifc | |
COMMAND | |
${CMAKE_CXX_COMPILER} | |
/std:c++latest | |
/stdIfcDir ${STD_MODULES_DIR} | |
/experimental:module | |
/c | |
/EHsc | |
/MD | |
${CMAKE_CURRENT_SOURCE_DIR}/${ARGN} | |
/module:export | |
/ifcOutput | |
${PREBUILT_MODULE_DIR}/${name}.ifc | |
/Fo${PREBUILT_MODULE_DIR}/${name}.obj | |
) | |
endfunction() | |
set(CUSTOM_MODULES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/modules) | |
add_module(my_module ${CUSTOM_MODULES_DIR}/my_module.ixx) | |
add_executable(test | |
test.cpp | |
) | |
target_compile_options(test | |
BEFORE | |
PRIVATE | |
/std:c++latest | |
/experimental:module | |
/stdIfcDir ${STD_MODULES_DIR} | |
/ifcSearchDir ${PREBUILT_MODULE_DIR} | |
/reference my_module=${PREBUILT_MODULE_DIR}/my_module.ifc | |
/EHsc | |
/MD | |
) | |
target_link_libraries(test ${PREBUILT_MODULE_DIR}/my_module.obj) | |
add_dependencies(test my_module.ifc) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment