我怎样才能找到已编译的包

How can I CMake find the package which was compiled

本文关键字:编译      更新时间:2023-10-16

首先,我正在使用 Centos 7 我正在尝试编译最新的暗表,我已经克服了基本问题,包括编译 gphoto2、exiv2 等。

但是现在当我尝试使用此处的基本说明构建暗表时: https://github.com/darktable-org/darktable

mkdir build/ cd build/ cmake -DCMAKE_INSTALL_PREFIX=/opt/darktable/ .. make sudo make install

在尝试 cmake 几次时,我不得不解决一些问题,但我坚持的问题是。

Centos7 附带 Exiv2 版本 0.23,Darktable 需要最低版本 0.24

我用dnf删除了exiv2 0.23,然后成功地将exiv2从源代码编译并安装到0.26版本。

经过几次尝试后,我用 --prefix=/usr配置 exiv2,因为 darktable 说他找不到库。

现在我仍然有同样的问题 并且 cmake 退出并显示以下错误:

CMake Error at cmake/modules/FindExiv2.cmake:46 (message): Exiv2 version check failed. Version was found, at least version 0.24 is required Call Stack (most recent call first): src/CMakeLists.txt:292 (find_package) -- Configuring incomplete, errors occurred! See also "/opt/darktable-2.4.1/build/CMakeFiles/CMakeOutput.log". See also "/opt/darktable-2.4.1/build/CMakeFiles/CMakeError.log".

我对 cmake 的了解几乎一无所知,但我看到 src/CMakeLists.txt第 292 行搜索一个不再存在的包,因为我已经用 dnf 删除了它。

# Require exiv2 >= 0.24 to make sure everything we need is available find_package(Exiv2 0.24 REQUIRED) include_directories(SYSTEM ${Exiv2_INCLUDE_DIRS}) list(APPEND LIBS ${Exiv2_LIBRARIES}) add_definitions(${Exiv2_DEFINITIONS})

但是如何让 cmake 查找我构建和安装的 exiv2? 并找到它需要的所有库?

找到了解决方案!

我意识到在/usr/lib64/pkgconfig/usr/local/lib/pkgconfig 和其他一些*.pc文件下

。在我编译和安装 Exiv2 之后,它将这个exiv2.pc放在/usr/lib/pkgconfig/下。这是那里唯一的文件。

所以我在/usr/lib64/pkgconfig 中创建了一个指向 exiv2.pc 文件的软链接 它完成了这项工作,只是弹出了另一个问题列表。

>该 CMake 行在Exiv2_INCLUDE_DIRS中查找头文件,并在Exiv2_LIBRARIES中查找库文件。尝试在 CMake 命令中设置这些变量:

cmake [...] -DExiv2_INCLUDE_DIRS=/usr/include -DExiv2_LIBRARIES=/usr/lib

(也许后者必须是库文件本身,而不是它的目录,我不知道。

([...]将被替换为您在那里已经拥有的任何参数。