2017-04-03 117 views
0

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

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工具。

+0

你有用于手动安装bluez(5.44)的'.pc'文件吗?我在[source tree](https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/)中看不到任何人。没有这样的文件,Utility'pkg-config'找不到任何东西。 – Tsyvarev

+1

@Tsyvarev'bluez.pc'由autotools自动生成。 OP的'pkg-config'很可能不知道它的安装位置。 – nega

回答

0

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

+0

我找到了bluez.pc并相应地更改了安装位置和版本。谢谢 –

相关问题