在 cmake 构建中使用 LLVM

CDZ*_*CDZ 6 cmake llvm

我正在尝试构建我自己的使用 LLVM 的项目。我在官网(最新版本)下载了源代码和预编译包。

http://releases.llvm.org/download.html
Run Code Online (Sandbox Code Playgroud)

我下载了 :

LLVM source code
Clang for Windows (64-bit)
Run Code Online (Sandbox Code Playgroud)

仅供参考,我不构建 LLVM ......只想使用它!

我按照这里的说明进行操作:http : //llvm.org/docs/CMake.html#embedding-llvm-in-your-project

在以下部分中:“在您的项目中嵌入 LLVM”

所以,我添加了这个代码:

find_package(LLVM REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
message("LLVM_INCLUDE_DIRS=${LLVM_INCLUDE_DIRS}")
message("LLVM_DEFINITIONS=${LLVM_DEFINITIONS}")
Run Code Online (Sandbox Code Playgroud)

但是我收到了几条 cmake 错误消息,这是我的输出:

-- Using LLVMConfig.cmake in: C:\\Luciad_src\\libs\\LLVM\\cmake\\modules
LLVM_INCLUDE_DIRS=
LLVM_DEFINITIONS=
CMake Error at C:/Luciad_src/libs/LLVM/cmake/modules/LLVM-Config.cmake:31 (list):
  list sub-command REMOVE_ITEM requires two or more arguments.
Call Stack (most recent call first):
  C:/Luciad_src/libs/LLVM/cmake/modules/LLVM-Config.cmake:256 (is_llvm_target_library)
  components/query/CMakeLists.txt:15 (llvm_map_components_to_libnames)
Run Code Online (Sandbox Code Playgroud)

我的脚本或我使用的软件包有问题吗?任何的想法 ?

谢谢你的帮助

Flo*_*ian 6

您可以拥有LLVMas 二进制或源包。

二进制包不包括 CMake 支持。如果比较两个安装(左侧是二进制,右侧是构建和安装后的源),您可以看到不同之处:

LLVM-5.0.0-win64.exe <=> llvm-5.0.1.src.tar.xz(构建并安装)

在此处输入图片说明 在此处输入图片说明

因此,您需要先构建并安装源包以获得 CMake 支持。在我的 Windows 机器上,我需要一个具有管理员权限cmdshell ,一个 Visual Studio 安装,转到下载和提取的源代码并执行以下操作:

> mkdir mybuilddir
> cd mybuilddir
> cmake ..
> cmake --build . --config Release --target INSTALL
Run Code Online (Sandbox Code Playgroud)

如果我现在使用您的 CMake 示例,我会得到:

-- Found LLVM 5.0.1
-- Using LLVMConfig.cmake in: C:/Program Files (x86)/LLVM/lib/cmake/llvm
LLVM_INCLUDE_DIRS=C:/Program Files (x86)/LLVM/include
LLVM_DEFINITIONS=-DLLVM_BUILD_GLOBAL_ISEL -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -DUNICODE -D_UNICODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-- Configuring done
Run Code Online (Sandbox Code Playgroud)

  • LLVM 开发人员不将 cmake 文件包含到预构建版本中真是太好了。尽管如此,在构建期间,LLVM 需要 llvm-config.cmake...非常适合生产。 (2认同)