使用 cmake 将 LLVM 添加到项目中

16

我正在尝试将LLVM添加到一个使用cygwin作为编译器的cmake项目中。我从cygwin的安装程序中下载了LLVM(只安装了所有与llvm相关的软件包)。文件已存在,但我无法在我的项目中包含LLVM。我尝试使用官方3.5.2指南(它安装的版本),我的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.2)
project(Lang)

find_package(LLVM REQUIRED CONFIG)

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


include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)

add_executable(Lang ${SOURCE_FILES})

llvm_map_components_to_libnames(llvm_libs support core irreader)

# Link against LLVM libraries
target_link_libraries(Lang ${llvm_libs})

然而,我收到了一堆类似这样的错误

enter image description here

我做错了什么吗?我想要做的就是在我的项目中使用LLVM。


你应该找出所需组件的库。请查看https://dev59.com/Duo6XIcBkEYKwwoYIAof#25783251。 - Marco A.
可能是重复的问题Cmake和clang工具链链接错误(源代码树之外) - Mark Garcia
2个回答

19

这里的答案已经过时了。
在更新版本的LLVM中,包括了一个工具来将LLVM包含在CMake项目中。
请参阅如何在您的项目中嵌入LLVM的文档。

因此,在您的项目的CMakeLists.txt文件中会有这些内容:

cmake_minimum_required(VERSION 3.4.3)
project(SimpleProject)

find_package(LLVM REQUIRED CONFIG)

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

# Set your project compile flags.
# E.g. if using the C++ header files
# you will need to enable C++11 support
# for your compiler.

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

# Now build our tools
add_executable(simple-tool tool.cpp)

# Find the libraries that correspond to the LLVM components
# that we wish to use
llvm_map_components_to_libnames(llvm_libs support core irreader)

# Link against LLVM libraries
target_link_libraries(simple-tool ${llvm_libs})

这应该可以解决问题。
如果在 Windows 上遇到问题,请按照此线程中建议的安装源代码包而不是二进制包。

如果你出现了这个错误:

CommandLine Error: Option 'help-list' registered more than once!
LLVM ERROR: inconsistency in registered CommandLine options

target_link_libraries()中的${llvm_libs}替换为LLVM。 你可以查看这个Github讨论串


这就是与问题中相同的代码。 - milahu

5

如评论中Marco A.所指出的,问题是缺少相关库。通过此链接解决了问题,现在一切都正常了。

谢谢。


不用谢 :) 把它标记为答案,如果您愿意,可以进一步扩展解决方案。 - Marco A.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接