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

M1 Mac用CMake+G++构建C++20模块报错:生成器不支持模块源文件

问题修复:CMake + G++ 在M1 Mac上构建C++20模块失败

你遇到的错误核心原因是Unix Makefiles生成器暂不支持CMake的实验性C++模块功能,同时你的CMake配置存在重复设置、未定义变量等问题,以下是具体修复步骤:

1. 切换到Ninja生成器

CMake的实验性C++模块实现对Ninja生成器的支持更完善,Unix Makefiles目前未适配该功能:

  • 安装Ninja(M1 Mac通过Homebrew):
    brew install ninja
    
  • 重新配置时指定Ninja生成器(确保使用Homebrew安装的G++,避免系统clang伪装的g++):
    cmake -S . -B build -G Ninja -DCMAKE_CXX_COMPILER=/opt/homebrew/bin/g++-12
    

2. 修正CMakeLists.txt配置

以下是修复后的完整配置,解决了重复设置、未定义变量等问题:

cmake_minimum_required(VERSION 3.25)
project(TryingModules CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# 对应CMake 3.25的实验性C++模块API标识
set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "3c375311-a3c9-4396-a187-3227ef642046")

# 启用动态依赖扫描
set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1)

# 配置G++的模块依赖扫描命令
string(CONCAT CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE
  "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E -x c++ <SOURCE>"
  " -MT <DYNDEP_FILE> -MD -MF <DEP_FILE>"
  " -fmodules-ts -fdep-file=<DYNDEP_FILE> -fdep-output=<OBJECT> -fdep-format=trtbd"
  " -o <PREPROCESSED_SOURCE>")

# G++模块映射相关配置
set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "g++")
set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG
  "-fmodules-ts -fmodule-mapper=<MODULE_MAP_FILE> -fdep-format=trtbd -x c++")

# 全局启用C++模块TS
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmodules-ts")

add_library(TryingModules)
target_sources(TryingModules
  PUBLIC
    FILE_SET cxx_modules TYPE CXX_MODULES FILES moduleTest.cpp
)

add_executable(main main.cpp)
target_link_libraries(main PRIVATE TryingModules)

配置修正点:

  • 移除重复的CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT设置
  • 删除未定义的compiler_flags_for_module_map变量引用
  • 启用CMAKE_CXX_STANDARD_REQUIRED和CMAKE_CXX_EXTENSIONS OFF确保严格遵循C++20标准
  • 清理target_link_libraries的冗余参数

3. 验证G++版本兼容性

C20模块(TS)需要G 11及以上版本,执行以下命令确认版本:

g++ --version

版本过低则通过Homebrew更新:

brew install gcc

4. 执行构建

配置完成后进入build目录执行构建:

cd build
cmake --build .
./main

内容的提问来源于stack exchange,提问作者Amory Acosta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:50:21