首页 > 解决方案 > 使用 cmake 构建 LLVM。-D_GLIBCXX_USE_CXX11_ABI=0 是否被覆盖?

问题描述

我尝试构建 LLVM。这就是我尝试的方式……</p>

    mkdir -p src/llvm-$(LLVM_VERSION).src/build
    cd src/llvm-$(LLVM_VERSION).src/build && \
        $(CMAKE) -GNinja \
            -DCMAKE_INSTALL_PREFIX=$(BUNDLE) \
            -DCMAKE_CXX_FLAGS="-D_GLIBCXX_USE_CXX11_ABI=0 -std=c++11 -static-libgcc -static-libstdc++ -l:libstdc++.a" \
            -DLLVM_TARGETS_TO_BUILD="X86;NVPTX" \
            -DLLVM_PARALLEL_COMPILE_JOBS=$(BUILD_JOBS) \
            -DLLVM_PARALLEL_LINK_JOBS=2 \
            -DLLVM_USE_CRT_RELEASE=MD \
            -DLLVM_USE_CRT_DEBUG=MDd \
            -DLLVM_STATIC=ON \
            -DLLVM_INCLUDE_TESTS=OFF \
            -DLLVM_INCLUDE_EXAMPLES=OFF \
            -DLLVM_BUILD_LLVM_C_DYLIB=OFF \
            -DLLVM_ENABLE_TERMINFO=OFF \
            -DLLVM_ENABLE_UNWIND_TABLES=OFF \
            -DLLVM_ENABLE_RTTI=ON \
            .. && \
        $(CMAKE) --build . && \
        $(CMAKE) --build . --target install

您可以在 -DCMAKE_CXX_FLAGS 中看到 -D_GLIBCXX_USE_CXX11_ABI=0。LLVM 编译完成后,libLLVM*.a 仍然包含 abi:cxx11 符号。

llvm-config 显示,llvm 构建过程完全忽略了“-D_GLIBCXX_USE_CXX11_ABI=0”标志。

> ./bundle/bin/llvm-config --cxxflags
-I/home/leonard/Documents/Develop/build_as_deps/bundle/include -std=c++11   -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS

您是否知道如何以禁用 abi:cxx11 符号并防止“-D_GLIBCXX_USE_CXX11_ABI=0”被覆盖的方式构建 llvm?

标签: cmakebuildllvm

解决方案


看起来您将 cmake 选项(由 via 指定-D)与 C/C++ 编译器宏(也由 via 指定-D,但由编译器指定)混淆了。cmake 很高兴地忽略了您的-D_GLIBCXX_USE_CXX11_ABI,因为它不是 cmake 选项(并且您应该看到关于此的警告,即构建系统未使用该值)。

由于您需要添加额外的宏定义,因此您需要更改CMAKE_CXX_FLAGScmake 变量。


推荐阅读