cmake_minimum_required(VERSION 3.28)
project(moduledemo LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 扫描依赖关系
set(CMAKE_CXX_SCAN_FOR_MODULES TRUE)
add_library(mymath)
target_sources(mymath
PUBLIC
FILE_SET CXX_MODULES
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
FILES
mymath.ixx
)
target_sources(mymath
PRIVATE
mymath.cpp
)
add_executable(moduledemo main.cpp)
if(MSVC)
target_compile_options(moduledemo PRIVATE /std:c++20)
else()
target_compile_options(moduledemo PRIVATE -fmodules-ts)
endif()
target_link_libraries(moduledemo PRIVATE mymath)
// mymath.ixx
export module mymath;
export int add(int a, int b);
// mymath.cpp
module mymath;
int add(int a, int b)
{
return a + b;
}
#include <iostream>
import mymath;
using namespace std;
int main()
{
int x = add(1, 2);
cout << "return:" << x << endl;
return 0;
}