Я пытаюсь создать приложение, которое использует библиотеку LibUSB.
В предыдущем вопросе я задал Вот Мне сказали использовать find_path
а также find_library
заставить CMake искать заголовки и двоичные файлы. Однако даже после ручного поиска мест установки библиотеки с 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 найти заголовки и сохранить найденные пути в 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)
,
в файле, где определена цель сборки.