如何使用CMake用Clang构建一个带有C++23标准库模块(导入std)的项目?

wgx48brx  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(233)

根据cppreference,标准库模块(P2465R3)现在已经成为Clang 17的实验功能。但我在下面测试它,它失败了:

CMakeList.txt

CMAKE_MINIMUM_REQUIRED(VERSION 3.27)

set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "aa1f7df0-828a-4fcd-9afc-2dc80491aca7")
set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP ON)

set(CMAKE_CXX_EXTENSIONS OFF)

set(CMAKE_CXX_STANDARD 23)

project(1-1)

add_executable(${CMAKE_PROJECT_NAME})
target_sources(${CMAKE_PROJECT_NAME}
    PUBLIC
    FILE_SET all_my_modules TYPE CXX_MODULES FILES
    PUBLIC
    main.cpp
)

字符串

main.cpp

import std;
using namespace std;

int main(){
    cout<<"Hello\n";
}


它显示:

fatal error: module 'std' not found


所以我猜它需要在Clang 14中添加像<format>这样的额外选项。但是我在llvm doc或谷歌上找不到。有人能给予我一些帮助吗?
我在一个更复杂的例子中尝试了clang的模块,但是#include标准库。所以我确信这只是因为标准库模块。

xhv8bpkk

xhv8bpkk1#

clang和libc对标准模块的支持是高度实验性的。值得注意的是,如果你只是正常安装,std模块的模块文件将不会安装。
libc
团队在这里提供了一些说明,如果你想尝试一下:
https://libcxx.llvm.org/Modules.html

相关问题