0

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

我为我的 debian 系统下载了开发包。现在我想告诉我的编译器(Qt Creator 中的 gcc)使用文档中提到的工具在哪里可以找到带有 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 文件。但是我使用的第一个文件需要其他几个 cmake 文件,我也下载了这些文件。我将它们放在与 FindGpgme.cmake 相同的目录中。找到了主 cmake 文件 (FindGpgme.cmake),但没有找到 MacroEnsureVersion 和 MacroBoolTo01。我对 CMakeLists.txt 的更改如下:

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

我尝试了 FindGpgme.cmake 中其他文件的相对和绝对路径。同样的问题 - cmake 找不到它们。我的第二次尝试是使用我在 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. 但是绝对安装了开发包(使用包管理器)

4

1 回答 1

2

我建议使用适当的 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)
于 2016-01-05T13:17:40.747 回答