10

我正在尝试从标准分发中构建一个示例,即 BrainF,但没有成功。

我制作了示例/BrainF 的副本并尝试从该目录运行 cmake。最初 CMakeLists.txt 看起来像这样:

set(LLVM_LINK_COMPONENTS jit bitwriter nativecodegen interpreter)

add_llvm_example(BrainF
  BrainF.cpp
  BrainFDriver.cpp
  )

cmake 抱怨 add_*。我通读了http://llvm.org/docs/CMake.html#embedding并决定在 CMakeLists.txt 中添加一些前奏:

find_package(LLVM)

# Define add_llvm_* macro's.
include(AddLLVM)

add_definitions(${LLVM_DEFINITIONS})
include_directories(${LLVM_INCLUDE_DIRS})
link_directories(${LLVM_LIBRARY_DIRS})

然后cmake抱怨它无法执行find_package(LLVM)并建议寻找LLVMConfig.cmake或llvm-config.cmake。我发现最接近的东西放在 /usr/src/llvm/cmake/modules/LLVM-Config.cmake 下,所以我设置CMAKE_PREFIX_PATH=/usr/src/llvm/cmake/modules/了 LLVMConfig.cmake 到 LLVM-Config.cmake 的软链接。

然后cmake这样抱怨:“include could not find load file: AddLLVM”。如果我对包含 AddLLVM.cmake 的整个路径进行硬编码,则问题出在 AddLLVM.cmake 中存在的包含问题上,因此这似乎不是完成工作的正确方法。

我的环境是 Xubuntu 12.04 和 llvm+clang 3.1(从一些 ppa 获取 deb 包,从 Debian 反向移植)。

4

2 回答 2

4

该线程帮助我获得了AddLLVM:对于cmake“包含”命令,文件和模块有什么区别?

此外,现在手动设置后我有问题:“在 llvm 库列表中找不到库 `jit'”。错误全文:

$ cmake .
CMake Error at /usr/src/llvm/cmake/modules/LLVM-Config.cmake:141 (message):
  Library `jit' not found in list of llvm libraries.
Call Stack (most recent call first):
  /usr/src/llvm/cmake/modules/LLVM-Config.cmake:54 (explicit_map_components_to_libraries)
  /usr/src/llvm/cmake/modules/LLVM-Config.cmake:47 (explicit_llvm_config)
  /usr/src/llvm/cmake/modules/AddLLVM.cmake:86 (llvm_config)
  /usr/src/llvm/cmake/modules/AddLLVM.cmake:112 (add_llvm_executable)
  CMakeLists.txt:17 (add_llvm_example)
于 2012-08-13T12:54:58.930 回答
2

在 llvm 11.0.

我试过了,它有效。

可能必须使用 add_llvm_executable 命令与 LLVM_LINK_COMPONENTS 链接

cmake_minimum_required(VERSION 3.4.3)

find_package(LLVM REQUIRED CONFIG)
project(BrainF)

message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")

include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
include(AddLLVM)

set(LLVM_LINK_COMPONENTS
  BitWriter
  Core
  ExecutionEngine
  MC
  MCJIT
  Support
  nativecodegen
  )

add_llvm_executable(BrainF
  BrainF.cpp
  BrainFDriver.cpp
  )

ps更新。2020.11.1。

更多信息

cmake_minimum_required(VERSION 3.4.3)
project(BrainF)

find_package(LLVM 11 REQUIRED CONFIG)
add_definitions(${LLVM_DEFINITIONS})
include_directories(${LLVM_INCLUDE_DIRS})

message(STATUS "LLVM VERSION : ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")

add_executable(BrainF
  BrainF.cpp
  BrainFDriver.cpp
)

llvm_map_components_to_libnames(llvm_libs support core irreader)

target_link_libraries(BrainF llvm_libs)
于 2020-05-06T01:08:37.420 回答