【问题标题】:Using GPGME in Debian for C++ Application在 Debian 中为 C++ 应用程序使用 GPGME
【发布时间】:2016-01-05 13:02:20
【问题描述】:

我想在我的 C++ 应用程序中使用 GPGME 生成和加密密钥。但是,在尝试开始时,我遇到了一个问题:

我为我的 debian 系统下载了开发包。现在我想告诉我的编译器(Qt Creator 中的 gcc)在哪里可以使用 tool mentioned in the documentation 找到带有 cmake 的库。但我不知道如何将gpgme-config --cflags --libs 添加到我的编译器标志中。这不起作用:

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} `gpgme-config --cflags --libs` ")

当我尝试构建应用程序时,编译器找不到gpgme-config

c++: error: $(gpgme-config: File or Directory not found
c++: error: unrecognized command line option ‘--cflags’
c++: error: unrecognized command line option ‘--libs)’

无论如何在命令行上执行gpgme-config --cflags --libs 确实会给我一个结果:

-L/usr/lib/x86_64-linux-gnu -lgpgme -lassuan -lgpg-error

我知道文档中还提到了 Automake 和 libtool 以简化此过程。但我之前没有使用过 Automake 或 libtool。


更新:

我还尝试为 GPGME 使用 FindGpgme.cmake 文件。但是我使用的first file 需要其他几个cmake 文件,我也下载了这些文件。我将它们放在与 FindGpgme.cmake 相同的目录中。找到了主 cmake 文件 (FindGpgme.cmake),但没有找到 MacroEnsureVersion 和 MacroBoolTo01。我对 CMakeLists.txt 的更改如下:

include(cmake_modules/FindGpgme.cmake)
find_package(Gpgme)

我尝试了 FindGpgme.cmake 中其他文件的相对和绝对路径。同样的问题 - cmake 找不到它们。我的第二次尝试是使用file I found on gitweb。错误是:

CMake Error at cmake_modules/FindGpgme.cmake:376 (set_package_properties):
  Unknown CMake command "set_package_properties".
Call Stack (most recent call first):
  CMakeLists.txt:7 (include)

我完全不知道如何解决 set_package_properties 问题。


更新 2

我加了

include(FeatureSummary)

按照 kfunk 的建议发送到我的 CMakeLists.txt。现在我收到以下错误:

CMakeLists.txt:9 (find_package) 处的 CMake 警告:不提供 CMAKE_MODULE_PATH 中的“FindGpgme.cmake”此项目已询问 CMake 找到“Gpgme”提供的包配置文件,但是 CMake 没找到。

找不到“Gpgme”提供的包配置文件 以下任何名称:

GpgmeConfig.cmake
gpgme-config.cmake

将“Gpgme”的安装前缀添加到CMAKE_PREFIX_PATH或设置
“Gpgme_DIR”到包含上述文件之一的目录。如果 “Gpgme”提供单独的开发包或SDK,请务必 已安装。

即使消息描述接缝非常详细,我也不知道如何将 FindGpgme.cmake 添加到 CMAKE_MODULE_PATH 或如何将请求的前缀添加到 CMAKE_PREFIX_PATH。然而,开发包肯定是安装的(使用包管理器)

【问题讨论】:

  • 要获得set_package_properties,你需要include(FeatureSummary)——这是一个标准的CMake模块。
  • include(cmake_modules/FindGpgme.cmake) 是错误的,不要那样做。请参考cmake.org/Wiki/…——需要修改CMAKE_MODULE_PATH
  • 非常感谢!这完成了工作并解决了“问题1”!因为发帖真的晚了很久我决定把第二个问题放到separate question

标签: c++ cmake gpgme


【解决方案1】:

我建议使用适当的 CMake 查找脚本来查找 GPGME 安装:

这里的例子: https://quickgit.kde.org/?p=kwallet.git&a=blob&h=7a092104ba0604b0606c4662750b8b32c5c3e2c6&f=cmake%2FFindGpgme.cmake&o=plain

然后在你的 CMake 代码中出现这样的内容(未经测试):

find_package(Gpgme)
include_directories(${GPGME_INCLUDES})
target_link_libraries(YOURTARGET ${GPGME_VANILLA_LIBRARIES)

【讨论】:

  • 您是否有指向正常工作的纯文本 FindGpgme.cmake 文件的链接?我已经尝试了一些 FindGpgme 文件。但它没有奏效。请参阅我的更新答案。
  • 查看我的 FindGpgme.cmake 版本。 Afaics 它没有额外的依赖项。
  • 但它不是明文文件……或者我看不到明文的链接。
  • 哎呀。对不起,确实。固定。
  • 我更新了我原来的帖子。问题与您的 FindGpgme 文件相同。
猜你喜欢
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多