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

标签 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)

通常在这一点上,CMake GUI 会以红色显示一些新的配置变量,用于包含和库路径,以及一些非功能性默认值,例如 ZLIB_INCLUDE_DIR-NOTFOUND,然后我必须更改它到实际路径并重新运行配置。

但是,对于 libusb-1.0,我没有在 GUI 中获得任何新的配置变量。我勾选了高级复选框,但仍未显示所需的变量。

我下载了一个预编译的libusb-1.0.21,但是CMake难免找不到;这不是 *nix,其中库路径定义明确。我在文件服务器上有自己的目录结构来处理这些事情,所以 CMake 绝对无法找到这些东西,除非它询问我它们在哪里,而在这种情况下它没有这样做。

翻了一下,在Logger1的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})

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

在 CMake 创建的 CMakeCache.txt 文件中也提到了 libusb。该文件显示了一些看起来相关但标记为 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=

然后我回到 CMake 并按下 Configure,只是让它删除了我放入 CMakeCache.txt 的所有内容,然后提示它找不到库(duh。)

我没有也从来没有在我自己的项目中使用过 CMake,所以任何错误都超出了我有限的熟悉范围。

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

最佳答案

你可以做到——

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

关于cmake - 我如何告诉 CMake 在哪里可以找到 libusb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45396923/

相关文章:

cmake - 使用 CMake 时忽略外部模块中的警告

c++ - 找不到加载文件 OpenCVModules.cmake

cmake - 我可以忽略cmake中DEFINED这个关键字吗?

c - 在 gtk 窗口中流式传输 libuvc 代码的过程是什么?

c++ - 向 USB 设备写入数据

python - 如何让 Python 找到 `libusb` ? `pyusb` 后端需要它

windows - CMakeGUI 不显示输出日志

c++ - 将 yaml-cpp 添加到现有项目时正确设置 CMake 变量

c++ - CMake 找不到 QXmlSimpleReader

c++ - 如何在 CMAKE 中导出带有组件的库?