我正在尝试构建 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/