CMake 有实验性的 C++20 模块依赖扫描 ( !5562 )。我尝试使用 CMake 3.20、g++-11 和 ninja-1.10 来构建一个带有模块的项目。
// main.cpp
import mod;
int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)
// mod.ixx
export module mod;
export void f() {}
Run Code Online (Sandbox Code Playgroud)
CMakeLists.txt 是对https://gitlab.kitware.com/ben.boeckel/cmake/blob/cpp-modules/Modules/Compiler/GNU-CXX.cmake的改编
cmake_minimum_required(VERSION 3.20)
project(simple)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_DEPFILE_FORMAT gcc)
set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
string(CONCAT CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE
"<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E -x c++ <SOURCE>"
" -MT <DYNDEP_FILE> -MD -MF <DEP_FILE>"
" -fmodules-ts -fdep-file=<DYNDEP_FILE> -fdep-output=<OBJECT>"
" -fdep-format=trtbd")
set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "gcc")
set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG
" -fmodules-ts -fmodule-mapper=<MODULE_MAP_FILE>"
" -fdep-format=trtbd -x c++")
set(CMAKE_CXX_FLAGS "-fmodules-ts")
add_executable(simple main.cpp …Run Code Online (Sandbox Code Playgroud)