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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Clang作为独立项目构建,取决于LLVM二进制文件相关的知识,希望对你有一定的参考价值。

我想从源代码构建Clang,而不是LLVM。 Clang将LLVM作为硬依赖项,但是与其从源代码构建LLVM,不应该依赖于预先安装(预构建)的LLVM二进制文件。

我知道这是可能的,因为clang具有以下CMake标志-

  • LLVM_DIR
  • LLVM_LIBRARY_DIR
  • LLVM_MAIN_INCLUDE_DIR
  • LLVM_TOOLS_BINARY_DIR

并且Clang的CMakeLists.txt也有规定要依赖以前安装的LLVM版本。 (https://github.com/llvm-mirror/clang/blob/master/CMakeLists.txt#L14

我从这里获得了LLVM 9二进制和Clang 9源代码-http://releases.llvm.org/download.html#9.0.0

我正在尝试使用-构建Clang

cmake -DLLVM_BUILD_TOOLS=Off -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=host ../

但是,我收到以下错误-

CMake Error at /home/reik/Downloads/clang/lib/cmake/llvm/AddLLVM.cmake:467 (add_library):
  add_library cannot create target "SampleAnalyzerPlugin" because an imported
  target with the same name already exists.
Call Stack (most recent call first):
  /home/reik/Downloads/clang/lib/cmake/llvm/AddLLVM.cmake:665 (llvm_add_library)
  lib/Analysis/plugins/SampleAnalyzer/CMakeLists.txt:6 (add_llvm_library)


CMake Error at /home/reik/Downloads/clang/lib/cmake/llvm/AddLLVM.cmake:585 (target_link_libraries):
  Cannot specify link libraries for target "SampleAnalyzerPlugin" which is
  not built by this project.
Call Stack (most recent call first):
  /home/reik/Downloads/clang/lib/cmake/llvm/AddLLVM.cmake:665 (llvm_add_library)
  lib/Analysis/plugins/SampleAnalyzer/CMakeLists.txt:6 (add_llvm_library)

在上面的代码片段中,/ home / reik / Downloads / clang是LLVM二进制文件。 (注意,LLVM二进制文件随Clang二进制文件一起提供)

似乎因为LLVM二进制文件安装了Clang,所以add_library中存在某种冲突,因为某些事情已经存在(在此处找到相关线程-http://lists.llvm.org/pipermail/llvm-dev/2016-November/107616.html)->所以我想我缺少某种形式Clang作为独立项目构建时的配置步骤。

或者也许我只需要一个没有安装clang的LLVM二进制文件,但是我无法在LLVM的官方网站上找到任何类似的东西。

有人可以帮我吗?

答案

我认为您为cmake提供了错误的路径。我认为您指向的是名为clang的子目录。您应该改为指向llvm-project-llvmorg-9.0.0 / llvm本身。

运行以下内容:

cmake -DLLVM_BUILD_TOOLS=Off -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=host $LLVM_SRC

以上是关于将Clang作为独立项目构建,取决于LLVM二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

clang 3.1 在 Ubuntu 12.04 上构建的二进制文件无法使用 gdb 进行调试

LLVM 缺少链接器,无法编译 lld(llvm 链接器)

Visual Studio 2019 LLVM clang 标志

在C ++项目中将clang用作库

OS X 上的 LLVM 与 clang

Linux 5.18 对 LLVM配置方式支持更灵活