我正在尝试将一个附带程序(程序B)集成到使用CMake编译/构建的现有程序(程序A)中。目前,CMake处理查找程序A的所有资源,并编译程序A。我希望包括程序B所指向的几个.h文件,这样我就可以将B程序的一些.c代码嵌入到程序A中。
我尝试使用其中一个CMakeLists.txt文件,甚至将一些.c文件添加到add_library()块中,但在编译时仍然收到“未定义的THIS_FUNCTION引用”错误。
谢谢您抽时间见我!
编辑:下面是我在CMakeList.txt上更新的RPi文件的一部分
add_library(rtlsdr_shared SHARED
librtlsdr.c
tuner_e4k.c
tuner_fc0012.c
tuner_fc0013.c
tuner_fc2580.c
tuner_r82xx.c
gpu_fft.c #Added this and a couple other .c files
)
target_link_libraries(rtlsdr_shared
${LIBUSB_LIBRARIES}
)编辑2:
=> rtl-sdr
Proj B => gpu_fft
rtl-sdr/
CMakeLists.txt
build/
cmake/
include/
m4/
src/
CMakeLists.txt
gpu_fft/
makefile发布于 2014-02-04 23:06:08
我认为您最好将程序B作为共享库来构建,并在程序A的include_directories中添加程序B的包含,然后将target_link_libraries添加到程序A中。
编辑:
我想到的是一个具有此文件夹结构的项目:
projA/
CMakeLists.txt
include/
src/
B/
CMakeLists.txt
include/
src/B中的CMakeLists.txt非常经典,并构建了共享库libB.so (例如在linux上,.dll在WIN32上)。
在CMakeLists.txt of projA文件夹中放置:
# first build project B
add_subdirectory(B)
# add include directory of project B
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/B/include")
# [...] build here your project
# and finally:
target_link_libraries(A B)我希望它能帮上忙
EDIT2:要构建共享库,可以设置:
OPTION(BUILD_SHARED_LIBS TRUE)或者简单的
SET(BUILD_SHARED_LIBS TRUE)编辑3:您也可以简单地使用它作为外部库。首先设置库搜索路径:
LINK_DIRECTORIES(${yourPathToLibB})别忘了
include_directories("${yourPathToLibB}/include") 也是。然后就这么做
TARGET_LINK_LIBRARIES(A B)https://stackoverflow.com/questions/21564242
复制相似问题