Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何告诉CMake在哪里可以找到libusb?_Cmake_Libusb_Cmake Gui - Fatal编程技术网

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

我如何告诉CMake在哪里可以找到libusb?,cmake,libusb,cmake-gui,Cmake,Libusb,Cmake Gui,我正在尝试建立一个从Kinect收集数据的系统,用于离线SLAM。我在窗户上建筑。我正在尝试使用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:

我正在尝试建立一个从Kinect收集数据的系统,用于离线SLAM。我在窗户上建筑。我正在尝试使用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会为include和library路径显示一些红色的新配置变量,以及一些非功能性默认值,如
ZLIB\u include\u 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})
__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=
所以,它提到它需要libusb,但不是如何找到它

CMake创建的
CMakeCache.txt
文件中也提到了libusb。该文件显示了许多看起来相关但标记为
INTERNAL
的配置变量,解释了为什么我没有在GUI中看到它们。除了
\uuuuu pkg\u config\u checked\u libusb-1.0
之外,所有这些的值都是空的

我试图将这些设置在合理明显的地方,如下所示:

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

...

target_link_libraries(Logger
                      ...other libraries...
                      ${libusb-1.0_LIBRARIES})
__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_PREFIX_PATH变量即使在
pkg config
实用程序上也有效,请参阅。但是,您需要描述您的库的
.pc
文件。可能是@usr1234567的副本我在发布之前看到了该Qn,但情况不同:在Linux上创建一个CMake脚本以在其标准目录中使用库,而我处理的是一个现有的CMake脚本,它似乎使用了不同的方法(
pkg\u check\u modules
)并需要它在Windows上的非标准目录中查找库。也许我只是不太了解CMake,但它似乎不是同一个问题。如果没有
,pc
文件
pkg\u check\u modules()
将无法工作。最简单的方法是替换对
pkg\u check\u module()的调用
直接将
libusb-1.0_库
变量设置为适当的值。在这种情况下,行
find_包(PkgConfig)
不是必需的。虽然这段代码可能提供了问题的解决方案,但最好添加它为什么/如何工作的上下文。这可以帮助未来的用户学习并最终将这些知识应用到他们自己的代码中。在解释代码时,您也可能得到用户的积极反馈/支持。