我知道您可以使用
-emit-llvm
选项制作 clang 输出 LLVM IR,但这使其成为唯一的输出。
我想知道是否有一些编译器选项的组合可以使 clang 的功能与以前完全一样,但也会生成
.ll
文件作为副产品?
我现在面临的问题是一个基于 cmake 的构建非常复杂的项目,我只能更改 clang 编译选项。我想为其生成 llvm IR 文件,但不幸的是,如果我只是通过
-emit-llvm
,CMake 会失败,因为它的编译器测试/健全性检查未通过(因为生成了 .ll 文件而不是有效的可执行文件)。
有没有办法让 clang 生成 exe/object 和 .ll 文件?或者以其他方式解决这个问题?
至少有两种方法可以实现这一目标:
-flto
:您将获得一个 LLVM 位代码文件,而不是每个目标文件(除了从程序集编译的文件外,它们仍然是目标文件)。-fembed-bitcode
:clang 将在最终可执行文件中添加另一个部分,其中包含所有 LLVM 位码文件(同样,除了汇编文件之外,它们仍然是目标文件)。然后,您可以使用 LibEBC 提取所有这些文件。无论您采用哪种方法,都必须使用
llvm-dis
工具将LLVM Bitcode文件转换为LLVM IR文件。
希望有帮助。
除了使用
-emit-llvm
之外,您还可以使用--save-temps
。这将生成 .ll、.ii、.o 和 .s 文件