CMake找不到外部库

时间:2016-01-26 15:57:25

标签: c++ cmake libusb-1.0

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

在上一个问题中,我问过here我被告知要使用find_pathfind_library来进行CMake搜索标题和二进制文件。但是,即使使用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)

显然我在这些黑客攻击中做错了什么,但有人可以告诉我什么吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如图所示返回原始问题here,所有发现和包含功能都可以简单地替换为:

target_link_libraries(project_name <other_dependencies> usb-1.0)

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