我怎么告诉CMake在哪里找到libusb?

时间:2017-07-30 06:10:46

标签: cmake libusb cmake-gui

我正在尝试构建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文件?

1 个答案:

答案 0 :(得分:0)

你可以 -

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