я иметь следующую структуру проектов/источник:CMake add_subdirectory с find_package?
MyProject
|-MyProject
| |-src
| | |-project.c
| |
| |-CMakeLists.txt
|
|-MyLibrary
|-include
| |-hello.h
|
|-src
| |-hello.c
|
|-CMakeLists.txt
MyProject/src/project.c
включает MyLibrary/include/hello.h
, который в свою очередь включает в себя libusb.h
из системы (найденной с помощью CMake).
И я добавляю зависимость libusb в MyLibrary/CMakeLists.txt
, используя следующий код:
# Find libusb
find_package(LibUsb REQUIRED)
# Include libusb
include_directories(${LIBUSB_INCLUDE_DIR})
# Add dependencies
target_link_libraries(owi535 ${LIBUSB_LIBRARY})
Однако при составлении MyProject
(который включает в себя MyLibrary
с использованием add_subdirectory
и target_link_libraries
), я получаю сообщение об ошибке с указанием libusb.h
не может быть найден.
Я могу скомпилировать MyLibrary
самостоятельно, однако для компиляции MyProject
требуется libusb.h
, чтобы быть в нем включен путь, которого нет.
Есть ли способ сделать это, добавив MyLibrary
в качестве зависимости, MyProject
тянет libusb.h
через него? Это означало бы, что мне не нужно повторять код find_package
для каждого проекта, который включает MyLibrary
.
Другой вопрос, который у меня есть, подобен; Я получаю сообщение о том, что есть Undefined symbols
при вызове функций libusb в MyLibrary
при компиляции MyProject
, однако при компиляции MyLibrary
на свой счет ошибок нет.
Undefined symbols for architecture x86_64:
"_libusb_close", referenced from:
_my_close_method in libMyLibrary.a(hello.c.o)
"_libusb_exit", referenced from:
_my_exit_method in libMyLibrary.a(hello.c.o)
"_libusb_init", referenced from:
_my_init_method in libMyLibrary.a(hello.c.o)
"_libusb_open_device_with_vid_pid", referenced from:
_my_open_method in libMyLibrary.a(hello.c.o)
ld: symbol(s) not found for architecture x86_64
У меня та же проблема с связывая фактическую библиотеку. Получение «Неопределенных символов», относящихся к libusb при компиляции 'MyProject', но' MyLibrary' компилируется отлично. Есть ли подобное исправление? –
Это отдельная проблема. Вы можете повторить этот ответ и открыть новый вопрос с новой проблемой. –
Но чтобы ответить на ваш вопрос, похоже, что вы на самом деле не связываете библиотеку libusb в MyLibrary правильно. Это не будет ошибкой при компиляции MyLibrary напрямую, так как кажется, что вы используете статическое связывание. –