cmake - 使用 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?
解决方案
看起来您将 cmake 选项(由 via 指定-D
)与 C/C++ 编译器宏(也由 via 指定-D
,但由编译器指定)混淆了。cmake 很高兴地忽略了您的-D_GLIBCXX_USE_CXX11_ABI
,因为它不是 cmake 选项(并且您应该看到关于此的警告,即构建系统未使用该值)。
由于您需要添加额外的宏定义,因此您需要更改CMAKE_CXX_FLAGS
cmake 变量。
推荐阅读
- python - Django rest 框架,创建预定义的身份验证操作
- json - Json 文件包含以 $ 开头的键名
- python - 熊猫如何检查特定列的值是相同的
- android - 有没有办法在Android中从它的容器中提取图像视图?
- presto - 如何在 presto 中使用日期范围
- sql - 自联接 SQL 执行时间过长
- c++ - C++中布尔函数的默认返回值是多少?
- javascript - 我无法在另一个模块中访问修改后的 window.location 对象
- android-studio - Android Studio:任务“:buildSrc:compileGroovy”执行失败
- amazon-web-services - 有什么方法可以使用 AWS CDK 代码将安全组和 VPC 分配给我在 Elastic Beanstalk 中托管的 Web 应用程序