CMake 找不到外部库

CMake can't find external library

我正在尝试构建一个使用 LibUSB 库的应用程序。

在上一个问题中,我问 我被告知使用 find_pathfind_library 让 CMake 搜索 headers 和二进制文件。然而,即使在使用 dnf 手动查找库的安装位置并将它们指定为 PATHSHINTS 之后,我仍然总是收到错误消息:

/usr/bin/ld: cannot find -lUSB
collect2: error: ld returned 1 exit status

下面是相关的 cmakelists.txt,我在 main.cpp 中的导入行是 #include <libusb-1.0/libusb.h>

add_executable(project main.cpp)
find_path(LIBUSB_INCLUDE_DIR
  NAMES libusb.h
  PATHS "/usr/include/"
  PATH_SUFFIXES "include" "libusb")
find_library(LIBUSB_LIBRARY
  NAMES USB
  HINTS "/usr/lib/" "/usr/lib64/" "/usr/include/"
  PATH_SUFFIXES "lib" "lib32" "lib64")

target_include_directories(project PRIVATE "/usr/lib/" "/usr/lib64/")
target_link_libraries(project USB)

很明显,我在这些乱七八糟的技巧中做错了什么,但有人能告诉我是什么吗?

您没有在任何地方使用查找操作的结果。你告诉 CMake 找到 headers 并将找到的路径存储在 LIBUSB_INCLUDE_DIR 中,找到库并将其位置存储在 LIBUSB_LIBRARY 中,然后你去忽略这些并使用硬编码 "/usr/lib/" "/usr/lib64/"USB 代替。试试这个:

target_include_directories(project PRIVATE ${LIBUSB_INCLUDE_DIR})
target_link_libraries(project ${LIBUSB_LIBRARY})

如在原始问题 中所示,所有查找和包含函数都可以简单地替换为:

target_link_libraries(project_name <other_dependencies> usb-1.0),

在定义构建目标的文件中。