我正在尝试将一个辅助程序(程序B)集成到用CMake编译/构建的现有程序(程序A)中。目前,CMake负责查找程序A的所有资源并编译程序A.我希望包含程序B指向的几个.h文件,因此我可以在程序A中嵌入一些程序B的.c代码。
我尝试过使用其中一个CMakeLists.txt文件,甚至将一些.c文件添加到add_library()块中,但在编译时仍然收到“未定义的THIS_FUNCTION引用”错误。
感谢您的时间!
编辑:这是我在RPi上更新的CMakeList.txt文件的一部分
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:
Proj A => RTL-SDR
Proj B => gpu_fft
rtl-sdr/
CMakeLists.txt
build/
cmake/
include/
m4/
src/
CMakeLists.txt
gpu_fft/
makefile
答案 0 :(得分:1)
我认为您最好将程序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上,WIN32上的.dll)。
在projA文件夹的CMakeLists.txt中输入:
# 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)