如何在使用 cmake 的 LLVM 构建中启用 --debug-only?

Posted

技术标签:

【中文标题】如何在使用 cmake 的 LLVM 构建中启用 --debug-only?【英文标题】:How to enable --debug-only in LLVM build with cmake? 【发布时间】:2016-10-14 11:52:56 【问题描述】:

我正在使用 cmake 和 Ninja 构建生成器构建 LLVM,如下所示:

cmake path/to/llvm/ -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=1 -DLLVM_ENABLE_CXX1Y=1 -DLLVM_ENABLE_RTTI=1 -DLLVM_TARGETS_TO_BUILD="X86" -G Ninja

现在我正在尝试使用 opt 的 -debug-only=mytype 选项打印一些关于我自己的通行证的调试信息:在我的通行证代码中使用以下内容:

define DEBUG_TYPE "mytype"
DEBUG(errs() << "My debug message\n");

按以下方式运行 opt 不会生成任何输出消息:

opt < a.bc > /dev/null -mypass -debug-only=mytype

据LLVM documentation:

出于性能原因,-debug-only 在 LLVM 的优化构建 (--enable-optimized) 中不可用。

我怀疑这是我的问题的根源,但是在使用 cmake 构建 llvm 时,我找不到如何打开/关闭此选项。

【问题讨论】:

【参考方案1】:

它是通过启用断言来控制的。 cmake -DLLVM_ENABLE_ASSERTIONS=ON 足以打开它。如果你没有看到你的调试输出,那么你的代码没有被执行。

【讨论】:

【参考方案2】:

我在这里添加对我的问题的补充答案。正如@Joky 所说,编译llvm 时必须指定cmake -DLLVM_ENABLE_ASSERTIONS=ON。此外,由于我的通行证是在 llvm 源代码树之外构建的,因此在构建通行证时也必须启用断言。

【讨论】:

以上是关于如何在使用 cmake 的 LLVM 构建中启用 --debug-only?的主要内容,如果未能解决你的问题,请参考以下文章

如何构建一个CMake项目(译)

在 Windows 上使用 CMake 和 MinGW 链接 LLVM 库

如何使用 CMake Tools 插件配置复杂的项目?

将Clang作为独立项目构建,取决于LLVM二进制文件

LLVM的安装

向 CMake 添加命令行选项