我正在尝试构建一个来自标准发行版的示例,即BrainF,但没有成功。
我制作了examples/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找不到加载文件:AddLLVM”。如果我将整个路径硬编码为包含AddLLVM.cmake,那么问题就转到了AddLLVM.cmake中存在的includes上,所以它看起来不像是完成任务的正确方法。
我的环境是xubuntu12.04和Debian 3.1 (从一些llvm+clang得到了deb包,从Debian得到了backport )。
发布于 2020-05-06 09:08:37
在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
)附注:更新。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)发布于 2012-08-13 20:54:59
这个帖子帮助我获得了AddLLVM:For the cmake "include" command, what is the difference between a file and a module?
此外,现在在手动设置后,我遇到了问题:“Library` `jit‘not found in list of llvm Library”。error的全文:
$ 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)https://stackoverflow.com/questions/11933485
复制相似问题