【发布时间】:2015-11-13 16:33:02
【问题描述】:
我有以下项目/来源结构:
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 找到)。
我正在使用以下代码在 MyLibrary/CMakeLists.txt 中添加 libusb 依赖项:
# Find libusb
find_package(LibUsb REQUIRED)
# Include libusb
include_directories(${LIBUSB_INCLUDE_DIR})
# Add dependencies
target_link_libraries(owi535 ${LIBUSB_LIBRARY})
但是,在编译 MyProject(包括使用 add_subdirectory 和 target_link_libraries 的 MyLibrary)时,我收到一条错误消息,指出找不到 libusb.h。
我可以自己编译MyLibrary,但是编译MyProject 需要libusb.h 在它的包含路径中,但它不是。
有没有办法通过添加MyLibrary 作为依赖项,MyProject 拉动libusb.h 通过它?这意味着我不需要为每个包含MyLibrary 的项目重复find_package 代码。
我遇到的另一个问题是类似的;当我编译MyProject 时,在MyLibrary 中调用libusb 函数时出现Undefined symbols 错误,但是当我自己编译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
【问题讨论】: