【问题标题】:Adding LLVM to my Cmake Project: Why are there hardcoded paths in LLVM's Cmake file?将 LLVM 添加到我的 Cmake 项目:为什么 LLVM 的 Cmake 文件中有硬编码路径?
【发布时间】:2014-10-01 14:58:04
【问题描述】:

我在我的 C++ 项目中使用 LLVM/Clang。我可以使用 Makefile 构建和运行一切正常。

我现在正在尝试迁移到 Cmake,但无法正常工作。让我解释一下我做了什么。

我正在学习本教程:

http://llvm.org/docs/CMake.html#embedding

来自该网页的相关 sn-p 是:

从 LLVM 3.5 开始,CMake 和 autoconf/Makefile 构建 系统将 LLVM 库导出为可导入的 CMake 目标。

太棒了!我会去下载 LLVM 3.5,我应该很好去。我去了下载页面:

http://llvm.org/releases/download.html

并为 Ubuntu 14.04 Linux 下载了 Clang 的预构建二进制文件。

然后,我将以下内容添加到我的 CMakeLists.txt 文件中:

find_path (LLVM_DIR LLVM-Config.cmake
     /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake
         )
message(STATUS "LLVM_DIR = ${LLVM_DIR}")
find_package(LLVM REQUIRED CONFIG)

(这与教程相同,只是我设置了LLVM_DIR,因为它当前位于非标准位置。)

当我运行cmake 时,我收到以下错误:

[dev@beauty:/path/to/project/build (develop)] $ cmake ..
-- LLVM_DIR = /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake
CMake Error at /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake/LLVMConfig.cmake:50 (include):
  include could not find load file:

    /home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/share/llvm/cmake/LLVMExports.cmake
Call Stack (most recent call first):
  CMakeLists.txt:14 (find_package)


CMake Error at /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake/LLVMConfig.cmake:53 (include):
  include could not find load file:

    /home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/share/llvm/cmake/LLVM-Config.cmake
Call Stack (most recent call first):
  CMakeLists.txt:14 (find_package)

所以 Cmake 似乎正在寻找 LLVM 的 Cmake 文件,但 Cmake 抱怨某些以 /home/ben/ 开头的路径。

确实,LLVM 的LLVMConfig.cmake 文件中似乎有一些与我的机器无关的绝对路径。例如:

[dev@beauty:~/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu ] $ head ./share/llvm/cmake/LLVMConfig.cmake
# This file provides information and services to the final user.

set(LLVM_INSTALL_PREFIX "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install")

set(LLVM_VERSION_MAJOR 3)
set(LLVM_VERSION_MINOR 5)
set(LLVM_VERSION_PATCH 0)
set(LLVM_PACKAGE_VERSION 3.5.0)

set(LLVM_COMMON_DEPENDS )

ben 是谁?他在这个文件中做什么?他出现在更多地方:

[dev@beauty:~/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu ] $ grep ben ./share/llvm/cmake/LLVMConfig.cmake
set(LLVM_INSTALL_PREFIX "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install")
set(LLVM_INCLUDE_DIRS "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/include")
set(LLVM_LIBRARY_DIRS "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/lib")
set(LLVM_CMAKE_DIR "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/share/llvm/cmake")
set(LLVM_TOOLS_BINARY_DIR "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/bin")

不用说,我的机器上不存在这些路径。我很困惑为什么这些文件中有这些路径?我应该运行一个工具或其他东西来改变我的机器的这些路径吗?还是我需要手动更改它们?

编辑:出于好奇,我手动将所有这些路径更改为指向我机器上的路径:

[dev@beauty:~/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake ] $ sed -i -e's/.home.ben.development.llvm.3.5.final.Phase3.Release.llvmCore-3.5.0-final.install/\/home\/dev\/Downloads\/clang+llvm-3.5.0-x86_64-linux-gnu/g' *

之后,Cmake 不再抱怨,我的构建继续进行。

我仍然想知道为什么我需要这样做。

【问题讨论】:

  • 我相信基于llvm-config 为外源编写一个FindLlvm.cmake 应该没问题;唯一担心的是你应该通过llvm-config的路径

标签: c++ linux cmake llvm


【解决方案1】:

听起来像一个 LLVM 错误。随意输入:http://llvm.org/bugs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多