gpt4 book ai didi

cmake - cmake 如何找到我的 llvm cmake 配置?

转载 作者:行者123 更新时间:2023-12-05 05:09:06 49 4
gpt4 key购买 nike

我想知道如果我没有给它任何变量告诉它在哪里找到它,cmake 如何找到我的 llvm cmake 配置。

我是 LLVM 新手。我正在构建一个 Hello World LLVM pass。我在 Ubuntu 16.04 上。我的 LLVM 版本是 8.0.0。我的 CMake 版本是 3.5.1。

这是我的/CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.1)
project(FunctionDebugger)

find_package(LLVM REQUIRED CONFIG)
include_directories(${LLVM_INCLUDE_DIRS})

add_subdirectory(FunctionDebugger)
set(CMAKE_VERBOSE_MAKEFILE on)

这是 FunctionDebugger/CMakeLists.txt 文件:

add_library(LLVMFunctionDebugger MODULE
FunctionDebugger.cpp
)

set_target_properties(LLVMFunctionDebugger PROPERTIES
COMPILE_FLAGS "-fno-rtti -std=c++11"
)

我这样配置和编译:

mkdir build && cd build
cmake ..
make

它正确地编译并链接了一个名为 libLLVMFunctionDebugger.so 的共享库。我不明白的是 cmake 如何找到请求的包:

# <project-root>/CMakeLists.txt
find_package(LLVM REQUIRED CONFIG)

除了 LLVM 二进制文件的路径,我没有给它任何路径,也没有在环境中定义任何东西。我阅读了 CMake 文档,但它说 find_package 在 CMAKE_PREFIX_PATH 下的文件夹中查找。我使用 message(STATUS ${CMAKE_PREFIX_PATH}) 打印该变量,输出为空。

最佳答案

您的设置看起来正确且清晰 CMake 正在寻找LLVMConfig.cmake脚本(即 find_package 使用 LLVM 8 设置传播必要的 CMake 变量的脚本)。

在我有权访问的 Ubuntu 16.04 机器上,LLVMConfig.cmake位于/usr/lib/llvm-8/lib/cmake/llvm/LLVMConfig.cmake , 但在 /usr/lib/llvm-8/cmake/ 中也有一个符号链接(symbolic link).所以自然的问题是:是否 CMake知道它应该看那里吗?答案是是的。在 CMake docs您可以看到其中一个搜索路径是:

<prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/  (U)

您可以验证 usr通过打印 CMAKE_SYSTEM_PREFIX_PATH 在前缀列表中.在我的机器上设置为:

/usr/local;/usr;/;/usr;/usr/local

最后可以打印LLVM_DIR在你的CMake用于检查 LLVM 版本/安装的脚本被 find_package 选中.变量在第一次执行 CMake 时将为空,然后 find_package找到 LLVM-8,变量被设置并保存在 CMakeCache.txt 中.

希望这对您有所帮助。

编辑

这个答案是在 Ubuntu 16.04 上测试的,LLVM 8 通过 apt-get 安装在系统范围内的默认位置。 .如果你在别处安装 LLVM 8,那么有多种指向方式 CMake到正确的位置,请参阅 find_package 的文档.编辑 PATH变量就是其中之一:

  1. Search the standard system environment variables. This can be skipped if NO_SYSTEM_ENVIRONMENT_PATH is passed. Path entries ending in /bin or /sbin are automatically converted to their parent directories:

PATH

关于cmake - cmake 如何找到我的 llvm cmake 配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57780600/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com