如何在CMake中使用`import std`

4
根据thisCMake 3.28,我们应该能够轻松地import std,而不需要额外的努力。 但是,我在下面的简单演示中遇到了错误Module 'std' not found
import std;

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

cmake_minimum_required(VERSION 3.28)
project(module_tst)

set(CMAKE_CXX_STANDARD 23)

add_executable(demo)
target_sources(demo
    PRIVATE
    main.cpp
)

在Visual Studio中,只要我勾选了"C/C++ -> General -> Scan Sources for Module Dependencies",import std就能正常工作。我在cmake文档中找到了类似的设置CXX_SCAN_FOR_MODULES,但是设置它并没有任何区别。有什么地方漏掉了吗?
我正在使用最新的cmake 3.28 rc1和VS 17.8.0 Preview 4.0。

1
虽然与直接相关无关,但是也有必要指定set(CMAKE_CXX_STANDARD_REQUIRED ON),以便在编译器不支持所请求的标准时能够及时发现。 - undefined
1个回答

0

在我尝试了几个月的C++模块之后, 据我所知(仅适用于MSVC)。

  • import std已更改为import std.core 这里
  • 我们必须安装c++ module for MSVC组件。默认情况下未选择。您可以通过打开Visual Studio Installer并进行修改来安装它们。
  • 模块分区在Ninja生成器中不起作用。
  • 即使文档中说“通过/ std:c++20或/ std:c++latest自动启用”,在编译命令中仍必须添加/experimental:module 链接
  • 我仍然不知道如何使智能感知与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)

4
std.core 是一个已停止的实验,你正在查看/链接到过时的文档。import std 没有改为 import std.core,恰恰相反。 - undefined
@ildjarn 谢谢。你帮了我很多,证明了我所知道的是错误的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接