如何使用 CMake 执行“导入 std”

isu*_*dfv 5 c++ cmake c++23

根据thisCMake 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 安装程序 > 修改来安装它们。
  • 模块分区不适用于 Ninja 生成器。
  • 必须在编译命令时添加/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)

  • `std.core` 是一个已停止的实验,您正在查看/链接到过时的文档。`import std` 没有更改为 `import std.core`,完全相反 (5认同)