В моем проекте CMake я копирую внешние библиотеки, которые хранятся в специальной папке, в свою выходную папку и импортирую их в качестве ИМПОРТИРОВАННОЙ цели.
Например, для libusb:
find_path(LibUsb_INCLUDE_DIR NAMES libusb.h PATHS ${CMAKE_CURRENT_SOURCE_DIR}/LibUsb/Include)
if(NOT LibUsb_INCLUDE_DIR)
message(FATAL_ERROR "LibUsb: include directory wasn't found")
endif()
find_library(LibUsb_LIBRARY NAMES usb-1.0 libusb-1.0 PATHS ${OUTPUT_BIN_DIR})
if(NOT LibUsb_LIBRARY)
message(FATAL_ERROR "LibUsb: library wasn't found")
endif()
add_library(LibUsb UNKNOWN IMPORTED GLOBAL)
set_target_properties(LibUsb PROPERTIES IMPORTED_LOCATION ${LibUsb_LIBRARY})
set_target_properties(LibUsb PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${LibUsb_INCLUDE_DIR})
message(STATUS "LibUsb: found at ${LibUsb_LIBRARY}")
Выход CMake:
...
-- Building for: Visual Studio 15 2017
-- The C compiler identification is MSVC 19.0.24234.1
-- The CXX compiler identification is MSVC 19.0.24234.1
...
-- CMAKE SYSTEM: Windows-10.0.17763
-- CMAKE VERSION: 3.13.4
...
-- LibUsb: copy binaries
-- VsCan: copy binaries
-- LibUsb: found at C:/myproj/Build/Windows-Debug/Output/Bin/libusb-1.0.lib
-- VsCan: found at C:/myproj/Build/Windows-Debug/Output/Bin/vs_can_api.lib
...
LibUsb
найден правильно, и если я напечатаю LibUsb_LIBRARY
, путь будет правильным. В Linux все правильно компилируется.
При компиляции Windows я получаю фатальную ошибку LNK1107: неверный или поврежденный файл .
Что я делаю не так?