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