有没有办法让 Clang 输出 LLVM IR 以及可执行文件?

问题描述 投票:0回答:2

我知道您可以使用

-emit-llvm
选项制作 clang 输出 LLVM IR,但这使其成为唯一的输出。

我想知道是否有一些编译器选项的组合可以使 clang 的功能与以前完全一样,但也会生成

.ll
文件作为副产品?

我现在面临的问题是一个基于 cmake 的构建非常复杂的项目,我只能更改 clang 编译选项。我想为其生成 llvm IR 文件,但不幸的是,如果我只是通过

-emit-llvm
,CMake 会失败,因为它的编译器测试/健全性检查未通过(因为生成了 .ll 文件而不是有效的可执行文件)。

有没有办法让 clang 生成 exe/object 和 .ll 文件?或者以其他方式解决这个问题?

compilation clang clang++ llvm-clang llvm-ir
2个回答
1
投票

至少有两种方法可以实现这一目标:

  1. -flto
    :您将获得一个 LLVM 位代码文件,而不是每个目标文件(除了从程序集编译的文件外,它们仍然是目标文件)。
  2. -fembed-bitcode
    :clang 将在最终可执行文件中添加另一个部分,其中包含所有 LLVM 位码文件(同样,除了汇编文件之外,它们仍然是目标文件)。然后,您可以使用 LibEBC 提取所有这些文件。

无论您采用哪种方法,都必须使用

llvm-dis
工具将LLVM Bitcode文件转换为LLVM IR文件。

希望有帮助。


0
投票

除了使用

-emit-llvm
之外,您还可以使用
--save-temps
。这将生成 .ll、.ii、.o 和 .s 文件

© www.soinside.com 2019 - 2024. All rights reserved.