在Debian中使用GPGME进行C ++应用程序

时间:2016-01-05 13:02:20

标签: c++ cmake gpgme

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

我为我的debian系统下载了dev包。现在我想告诉我的编译器(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。

更新

我还尝试将一个FindGpgme.cmake文件用于GPGME。但我使用的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上的CMake警告:9(find_package):未提供   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。然而,dev包是明确安装的(使用包管理器)

1 个答案:

答案 0 :(得分: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)