cmake build_error ai_generated partial

CMake Error: The Ninja generator does not support the CXX compiler 'clang++' because it is not a known compiler.

ID: cmake/generator-ninja-missing-compiler

Also available as: JSON · Markdown · 中文
70%Fix Rate
84%Confidence
1Evidence
2024-01-10First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
CMake 3.10 active
CMake 3.16 active
CMake 3.20 active
Ninja 1.10 active
Ninja 1.11 active

Root Cause

CMake's Ninja generator has a hardcoded list of supported compilers; if the compiler is not in that list (e.g., a custom build of clang or a different version), CMake rejects it.

generic

中文

CMake 的 Ninja 生成器有一个硬编码的支持编译器列表;如果编译器不在该列表中(例如自定义构建的 clang 或不同版本),CMake 会拒绝它。

Official Documentation

https://cmake.org/cmake/help/latest/generator/Ninja.html

Workarounds

  1. 90% success Use the 'Unix Makefiles' generator instead: cmake -G "Unix Makefiles" ..
    Use the 'Unix Makefiles' generator instead: cmake -G "Unix Makefiles" ..
  2. 80% success Set the CMAKE_GENERATOR to Ninja and also set CMAKE_CXX_COMPILER to a known compiler like g++: cmake -G Ninja -DCMAKE_CXX_COMPILER=g++ ..
    Set the CMAKE_GENERATOR to Ninja and also set CMAKE_CXX_COMPILER to a known compiler like g++: cmake -G Ninja -DCMAKE_CXX_COMPILER=g++ ..
  3. 75% success Upgrade CMake to a version that supports your compiler. For example, CMake 3.20+ added support for newer clang versions. Check release notes.
    Upgrade CMake to a version that supports your compiler. For example, CMake 3.20+ added support for newer clang versions. Check release notes.

中文步骤

  1. 改用 'Unix Makefiles' 生成器:cmake -G "Unix Makefiles" ..
  2. 设置 CMAKE_GENERATOR 为 Ninja 并设置 CMAKE_CXX_COMPILER 为已知编译器如 g++:cmake -G Ninja -DCMAKE_CXX_COMPILER=g++ ..
  3. 升级 CMake 到支持你的编译器的版本。例如,CMake 3.20+ 增加了对更新 clang 版本的支持。检查发布说明。

Dead Ends

Common approaches that don't work:

  1. 60% fail

    If the project requires clang-specific features (e.g., libc++), using g++ may cause compilation errors.

  2. 70% fail

    The issue is not version-specific; CMake's Ninja generator has a whitelist of compiler IDs. Even standard clang may fail if CMake version is old.

  3. 30% fail

    This works but may not preserve Ninja's build speed; also, the project may have Ninja-specific custom commands.