linux 如何在项目中使用CMake包含bluez最新版本库

20jt8wwn  于 2023-10-16  发布在  Linux
关注(0)|答案(2)|浏览(104)

我想包括bluez最新版本(5.44)到我的C程序项目。我正在使用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工具。

dfty9e19

dfty9e191#

首先,您需要确保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缓存,然后重新创建项目。

ktca8awb

ktca8awb2#

虽然这个问题有一个手动编译的Bluez版本,但在许多情况下,人们在任何Debian系统上进行Bluezapt的标准安装后可能会遇到完全相同的问题。
然而,要在一个项目中使用Bluez进行开发,还必须安装Bluez开发文件。这会导致

apt install libbluetooth-dev

这将依次将bluez.pc文件安装到标准位置,使pkg-config --modversion bluez和任何pkg_check_modules (BLUEZ REQUIRED bluez)都能正确解析。

相关问题