我如何告诉 CMake 在哪里可以找到 libusb?

Kev*_*vin 5 cmake libusb cmake-gui

我正在尝试构建logger1 ,它通过ElasticFusion从 Kinect 收集数据以进行离线 SLAM 。我正在 Windows 上构建。我正在尝试使用 VS10 构建 x64(我也有 VS12,但一些依赖项已预先配置到 VS10,因此为了简单起见,我正在使用它。)我正在使用 CMake 3.9.0。

我已经解决了大部分依赖关系,但 libusb 给我带来了麻烦。

我从 CMake 得到以下输出:

...
Checking for module 'libusb-1.0'
  No package 'libusb-1.0' found
CMake Error at C:/Program Files/CMake/share/cmake-3.9/Modules/FindPkgConfig.cmake:412 (message):
  A required package was not found
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.9/Modules/FindPkgConfig.cmake:588 (_pkg_check_modules_internal)
  CMakeLists.txt:12 (pkg_check_modules)
Run Code Online (Sandbox Code Playgroud)

通常,此时 CMake GUI 会以红色显示一些包含和库路径的新配置变量,以及一些非功能性默认值,例如ZLIB_INCLUDE_DIR-NOTFOUND我必须更改为实际路径并重新运行配置。

但是,在 的情况下libusb-1.0,GUI 中没有给我任何新的配置变量。我勾选了“高级”复选框,但所需的变量仍然没有显示。

我已经下载了一个预建的libusb-1.0.21,但是CMake不可避免地找不到它;这不是 *nix,其中库路径定义良好。我在文件服务器上有自己的目录结构来处理这些事情,所以 CMake 绝对无法找到东西,除非它询问我它们在哪里,但在本例中它没有这样做。

经过一番摸索,我在 Logger1's 中找到了一些参考资料CMakeLists.txt,如下:

find_package(PkgConfig)
pkg_check_modules(libusb-1.0 REQUIRED libusb-1.0)

...

target_link_libraries(Logger
                      ...other libraries...
                      ${libusb-1.0_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

所以,它提到它需要libusb,但没有提到如何找到它。

CMake 创建的文件中还提到了 libusb CMakeCache.txt。该文件显示了许多看起来相关但被标记为 的配置变量INTERNAL,这解释了为什么我在 GUI 中没有看到它们。除了 之外,所有这些值都是空的__pkg_config_checked_libusb-1.0

我尝试将它们设置在相当明显的地方,如下所示:

__pkg_config_checked_libusb-1.0:INTERNAL=1
libusb-1.0_CFLAGS:INTERNAL=
libusb-1.0_CFLAGS_I:INTERNAL=
libusb-1.0_CFLAGS_OTHER:INTERNAL=
libusb-1.0_FOUND:INTERNAL=
libusb-1.0_INCLUDEDIR:INTERNAL=N:/3p-build/libusb/1.0.21/prebuilt/include/libusb-1.0
libusb-1.0_LIBDIR:INTERNAL=N:/3p-build/libusb/1.0.21/prebuilt/MS64/dll
libusb-1.0_LIBS:INTERNAL=N:/3p-build/libusb/1.0.21/prebuilt/MS64/dll/libusb-1.0.lib
libusb-1.0_LIBS_L:INTERNAL=
libusb-1.0_LIBS_OTHER:INTERNAL=
libusb-1.0_LIBS_PATHS:INTERNAL=N:/3p-build/libusb/1.0.21/prebuilt/MS64/dll
libusb-1.0_PREFIX:INTERNAL=
libusb-1.0_STATIC_CFLAGS:INTERNAL=
libusb-1.0_STATIC_CFLAGS_I:INTERNAL=
libusb-1.0_STATIC_CFLAGS_OTHER:INTERNAL=
libusb-1.0_STATIC_LIBDIR:INTERNAL=N:/3p-build/libusb/1.0.21/prebuilt/MS64/static
libusb-1.0_STATIC_LIBS:INTERNAL=N:/3p-build/libusb/1.0.21/prebuilt/MS64/static/libusb-1.0.lib
libusb-1.0_STATIC_LIBS_L:INTERNAL=
libusb-1.0_STATIC_LIBS_OTHER:INTERNAL=
libusb-1.0_STATIC_LIBS_PATHS:INTERNAL=N:/3p-build/libusb/1.0.21/prebuilt/MS64/static
libusb-1.0_VERSION:INTERNAL=
libusb-1.0_libusb-1.0_INCLUDEDIR:INTERNAL=N:/3p-build/libusb/1.0.21/prebuilt/include/libusb-1.0
libusb-1.0_libusb-1.0_LIBDIR:INTERNAL=N:/3p-build/libusb/1.0.21/prebuilt/MS64/static
libusb-1.0_libusb-1.0_PREFIX:INTERNAL=
libusb-1.0_libusb-1.0_VERSION:INTERNAL=
Run Code Online (Sandbox Code Playgroud)

然后我回到 CMake 并按“配置”,结果它删除了我放入的所有内容CMakeCache.txt,然后抱怨它找不到库(废话。)

我没有也从未在自己的项目中使用过 CMake,因此无论出现什么问题都超出了我有限的熟悉范围。

如何让 CMake 识别我拥有的 libusb 文件?

小智 2

你可以做 -

find_package(PkgConfig REQUIRED)
    pkg_check_modules(libusb REQUIRED libusb-1.0)
Run Code Online (Sandbox Code Playgroud)