我正在尝试构建logger1,它通过ElasticFusion从Kinect收集离线SLAM的数据。我在Windows上构建。我正在尝试使用VS10构建x64(我也有VS12,但有些依赖项预先配置到VS10,所以为了保持简单,我使用它。)我使用CMake 3.9.0。
我已经解决了大多数依赖关系,但libusb给了我麻烦。
我从CMake得到以下输出:
404 not found
通常在这一点上,CMake GUI会为包含和库路径显示一些新的红色配置变量,并带有一些非功能性默认值,例如...
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)
,然后我必须将其更改为实际路径,重新运行配置。
但是,在ZLIB_INCLUDE_DIR-NOTFOUND
的情况下,GUI中没有给出任何新的配置变量。我勾选了“高级”复选框,但仍然没有显示所需的变量。
我已经下载了预先构建的libusb-1.0.21,但CMake不可避免地找不到它;这不是* nix,其中库路径是明确定义的。我在文件服务器上有自己的目录结构来处理这些事情,所以CMake绝对不能找到东西,除非它问我在哪里,在这种情况下它不会这样做。
稍微探讨一下,我在Logger1 libusb-1.0
中找到了一些引用,如下所示:
CMakeLists.txt
所以,它提到它需要libusb,而不是如何找到它。
在CMake创建的find_package(PkgConfig)
pkg_check_modules(libusb-1.0 REQUIRED libusb-1.0)
...
target_link_libraries(Logger
...other libraries...
${libusb-1.0_LIBRARIES})
文件中还提到了libusb。该文件显示了许多看似相关但标记为CMakeCache.txt
的配置变量,解释了为什么我在GUI中没有看到它们。除了INTERNAL
之外,所有这些的值都是空的。
我尝试将这些设置在相当明显的位置,如下所示:
__pkg_config_checked_libusb-1.0
然后我回到CMake并按下配置,只是为了删除我放在__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,所以无论出于什么问题,都是在我有限的熟悉之外。
如何让CMake识别我拥有的libusb文件?
答案 0 :(得分:0)
你可以 -
find_package(PkgConfig REQUIRED)
pkg_check_modules(libusb REQUIRED libusb-1.0)