【问题标题】:How to include bluez latest version library using CMake in project如何在项目中使用 CMake 包含 bluez 最新版本库
【发布时间】:2017-04-03 10:01:46
【问题描述】:

我想在我的 C 程序项目中包含 bluez 最新版本 (5.44)。我正在使用 CMake 进行构建。我尝试如下使用pkg_check_modules

pkg_check_modules (BLUEZ REQUIRED bluez)
include_directories(${BLUEZ_INCLUDE_DIRS})
link_directories(${BLUEZ_LIBRARY_DIRS})

但它总能找到旧版本 5.37。我怎样才能指出这一点以获取最新版本?

我也试过了,但它会抛出如下错误。

pkg_check_modules (BLUEZ REQUIRED bluez=5.44)
include_directories(${BLUEZ_INCLUDE_DIRS})
link_directories(${BLUEZ_LIBRARY_DIRS})

获取错误:

Checking for module 'bluez=5.44'
--   
CMake Error at /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:367 (message):
  A required package was not found
Call Stack (most recent call first):
  /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:532 (_pkg_check_modules_internal)
  CMakeLists.txt:30 (pkg_check_modules)

我下载了最新的 bluez 版本并使用 sudo make install 构建和安装。我能够找到并使用bluetoothctl 工具。

【问题讨论】:

  • 你有手动安装 bluez (5.44) 的 .pc 文件吗?我在source tree 中没有看到任何人。实用程序pkg-config 找不到没有此类文件的任何内容。
  • @Tsyvarev bluez.pc 由自动工具自动生成。 OP 的pkg-config 很可能不知道它的安装位置。

标签: linux bluetooth cmake bluez


【解决方案1】:

首先,您需要确保pkg-config 可以找到您安装的bluez 版本。如果不能,那么 CMake 也不能。

$ pkg-config --modversion bluez

如果这没有为您提供您期望的版本,那么您需要找到您想要的版本的bluez.pc,并确保其目录位于 PKG_CONFIG_PATH 的开头。既然你说你使用了sudo make install,那么你想要的bluez.pc很可能是/usr/local/lib/pkgconfig/bluez.pc。 (你需要自己看看才能确定。)如果是这样的话,那么

$ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --modversion bluez

应该返回您要查找的版本。如果是这样,请执行必要的操作以使该更改永久保存在您的 shell 中。删除您的 CMake 缓存,然后重新创建您的项目。

【讨论】:

  • 我找到了 bluez.pc 并相应地更改了安装位置和版本。谢谢
猜你喜欢
  • 2021-08-05
  • 2018-08-25
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
相关资源
最近更新 更多