CMake 找不到外部库
CMake can't find external library
我正在尝试构建一个使用 LibUSB 库的应用程序。
在上一个问题中,我问 我被告知使用 find_path
和 find_library
让 CMake 搜索 headers 和二进制文件。然而,即使在使用 dnf
手动查找库的安装位置并将它们指定为 PATHS
或 HINTS
之后,我仍然总是收到错误消息:
/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)
,
在定义构建目标的文件中。
我正在尝试构建一个使用 LibUSB 库的应用程序。
在上一个问题中,我问 find_path
和 find_library
让 CMake 搜索 headers 和二进制文件。然而,即使在使用 dnf
手动查找库的安装位置并将它们指定为 PATHS
或 HINTS
之后,我仍然总是收到错误消息:
/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)
,
在定义构建目标的文件中。