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)
| 归档时间: |
|
| 查看次数: |
6867 次 |
| 最近记录: |