根据this和CMake 3.28,我们应该能够import std
无需任何额外的努力。但我在下面的简单演示中遇到了错误Module 'std' not found
。
import std;
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
cmake_minimum_required(VERSION 3.28)
project(module_tst)
set(CMAKE_CXX_STANDARD 23)
add_executable(demo)
target_sources(demo
PRIVATE
main.cpp
)
Run Code Online (Sandbox Code Playgroud)
import std
只要我检查了C/C++ -> General -> Scan Sources for Module Dependencies
. 我在 cmake 文档中发现了类似的内容,CXX_SCAN_FOR_MODULES
但将其设置为没有任何区别。有什么遗漏吗?
我正在使用最新的 cmake 3.28 rc1 和 VS 17.8.0 Preview 4.0
Jak*_*nen -1
在我尝试了 C++ 模块几个月之后。据我所知(仅适用于 MSVC)。
import std
被改为import std.core
这里。c++ module for MSVC
组件。默认情况下未选择它。您可以通过转到 Visual Studio 安装程序 > 修改来安装它们。/experimental:module
甚至文档说“通过 /std:c++20 或 /std:c++latest 自动启用”链接。import std.core
。这是我的样板。
cmake_minimum_required (VERSION 3.26)
set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a") #this require to enable c++ module feature in my cmake version
set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) # enable scan dependencies /scanDependencies
set(CMAKE_CXX_STANDARD 20) # it work with c++20 but has some warnning
project ("cmake_project")
add_compile_options(
/EHsc
/experimental:module # require
$<$<CONFIG:Release>:/O2>
)
add_library(my_lib)
target_sources(my_lib PUBLIC FILE_SET my_lib_fs TYPE CXX_MODULES FILES
"src/modules/ratt.ixx"
)# compile as c++ module
add_executable (main "src/main.cpp" )
target_link_libraries(main PRIVATE my_lib)
Run Code Online (Sandbox Code Playgroud)