You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用`import std`时CMake在错误目录查找`std.cppm`的问题

问题:CMake无法定位libc++标准模块接口文件

背景

近期尝试对自有库做模块化改造,但未成功。相关的CMakeLists.txt和CMakePresets.json可查看仓库kissra。核心问题是CMake找不到标准std.cppm主模块接口(PMI)——它错误地去/lib/share/libc++/v1目录查找,而LLVM工具集实际安装路径是/usr/lib/llvm-21/。目前还没找到强制CMake在指定目录搜索PMIs的方法。

错误日志

-- Configuring done (7.1s)
CMake Error at build/debug/CMakeFiles/4.2.1/CMakeCXXCompiler.cmake:111 (target_sources):
Cannot find source file: /lib/share/libc++/v1/std.cppm
Call Stack (most recent call first):
CMakeLists.txt:8 (project)

生成的CMake脚本内容

查看build目录下生成的CMakeCXXCompiler.cmake,内容如下:

### Imported target for C++26 standard library
if (NOT TARGET "__CMAKE::CXX26")
if (NOT TARGET "__cmake_cxx26")
add_library(__cmake_cxx26 STATIC)
target_sources(__cmake_cxx26 INTERFACE "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,STATIC_LIBRARY>:$<TARGET_OBJECTS:__cmake_cxx26>>")
set_property(TARGET __cmake_cxx26 PROPERTY EXCLUDE_FROM_ALL 1)
set_property(TARGET __cmake_cxx26 PROPERTY CXX_SCAN_FOR_MODULES 1)
set_property(TARGET __cmake_cxx26 PROPERTY CXX_MODULE_STD 0)
target_compile_features(__cmake_cxx26 PUBLIC cxx_std_26)
target_compile_options(__cmake_cxx26 PRIVATE -Wno-reserved-module-identifier)
target_include_directories(__cmake_cxx26 PRIVATE  "/lib/x86_64-linux-gnu/../share/libc++/v1")
target_sources(__cmake_cxx26
  PUBLIC
  FILE_SET std TYPE CXX_MODULES
    BASE_DIRS  "/lib/x86_64-linux-gnu/../share/libc++/v1"
    FILES  "/lib/x86_64-linux-gnu/../share/libc++/v1/std.cppm" "/lib/x86_64-linux-gnu/../share/libc++/v1/std.compat.cppm")
endif ()
add_library(__CMAKE::CXX26 ALIAS __cmake_cxx26)
endif ()
if (TARGET "__CMAKE::CXX26")
  list(APPEND CMAKE_CXX_COMPILER_IMPORT_STD "26")
endif ()

疑问

从脚本可见CMake正尝试在/lib/share/libc++/v1中查找PMIs,请问能否通过在CMakePreset.json中设置全局CMake变量来指定PMIs的查找路径?


内容的提问来源于stack exchange,提问作者Dmitry Katkevich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 20:34:50