LLVM 19版本下如何仅构建libc++而非完整LLVM项目
解决LLVM 19+单独构建libc++的CMake配置问题
核心问题原因
LLVM 17之后重构了runtime组件(libcxx、libcxxabi、libunwind等)的构建系统,不再支持直接进入libcxx或libcxxabi子目录单独执行CMake,必须从llvm-project根目录通过LLVM_ENABLE_RUNTIMES参数指定要构建的runtime组件,但默认会附带大量额外目标,需要通过参数过滤。
正确的CMake配置命令
从llvm-project根目录执行以下命令,仅构建libcxx、libcxxabi、libunwind,同时屏蔽多余的测试、基准等目标:
cmake -GNinja -S llvm-project -B build-libcxx \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER=clang++ \ -DCMAKE_C_COMPILER=clang \ -DLLVM_ENABLE_RUNTIMES="libunwind;libcxxabi;libcxx" \ # 仅专注构建runtime,屏蔽LLVM核心组件 -DLLVM_BUILD_RUNTIME=ON \ -DLLVM_BUILD_TOOLS=OFF \ -DLLVM_BUILD_EXAMPLES=OFF \ -DLLVM_BUILD_TESTS=OFF \ -DLLVM_BUILD_BENCHMARKS=OFF \ # libcxx相关配置 -DLIBCXX_CXX_ABI=libcxxabi \ -DLIBCXX_CXX_ABI_INCLUDE_PATHS="${LLVM_FOLDER}/libcxxabi/include" \ -DLIBCXX_CXX_ABI_LIBRARY_PATH="${BUILD_DIR}/lib" \ -DLIBCXX_HAS_GCC_S_LIB=ON \ -DLIBCXX_ENABLE_SHARED=ON \ -DLIBCXX_ENABLE_FILESYSTEM=OFF \ -DLIBCXX_INCLUDE_TESTS=OFF \ -DLIBCXX_INCLUDE_BENCHMARKS=OFF \ # libcxxabi相关配置 -DLIBCXXABI_INCLUDE_TESTS=OFF \ # libunwind相关配置 -DLIBUNWIND_INCLUDE_TESTS=OFF
错误原因及修复
你之前的错误是直接在libcxx目录执行CMake并指定LLVM_ENABLE_RUNTIMES,不符合新版本构建逻辑,导致依赖目标(如cxx)无法被正确识别。必须切换到llvm-project根目录作为CMake源码路径(-S llvm-project),让构建系统正确解析runtime组件间的依赖关系。
减少构建目标的关键参数
以下参数可大幅降低生成的构建目标数量:
-DLLVM_BUILD_TOOLS=OFF:关闭LLVM工具链构建-DLLVM_BUILD_TESTS=OFF:关闭所有测试目标-DLIBCXX_INCLUDE_TESTS=OFF:关闭libcxx自身测试-DLIBCXXABI_INCLUDE_TESTS=OFF:关闭libcxxabi自身测试-DLIBUNWIND_INCLUDE_TESTS=OFF:关闭libunwind自身测试-DLLVM_BUILD_BENCHMARKS=OFF:关闭基准测试目标
执行上述命令后,构建目标数量会大幅降低,接近旧版本规模,同时不会出现依赖缺失错误。
内容的提问来源于stack exchange,提问作者vwvw
相关产品推荐
相关产品推荐

