c++ - CMake如何找到编译的包

标签 c++ linux cmake exiv2

首先,我正在使用 Centos 7 我正在尝试编译最新的 darktable,我已经克服了几个问题,包括编译 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 文件的软链接(soft link) 它完成了工作,只是弹出了另一个问题列表。

最佳答案

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

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

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

([...] 将替换为您已有的任何参数。)

关于c++ - CMake如何找到编译的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48481328/

相关文章:

javascript - 使用 native WebRTC 代码设置远程 SDP 的问题

c++ - Opencv 图像拼接混合(多波段混合)

php - Virtual Box 中的访问被拒绝

php - 如何在 NetBeans 7.0(PHP 的 Linux 版本)中禁用 Javascript 语法检查?

c++ - 使用 cmake 时出错

c++ - CMake 似乎忽略了一行?

c++ - 为什么我们使用 "const char* const* argv"而不是 "char *"?

linux - 不在符号链接(symbolic link)目录中符号链接(symbolic link)一个或两个文件

cmake - VS10 始终链接到 SUBSYSTEM :WINDOWS; CMake+SDL+GLEW

linux - 使用 cmake 从整个项目创建一个静态库