将另一个程序集成到使用CMake编译的现有程序中

时间:2014-02-04 21:49:44

标签: c cmake raspberry-pi

我正在尝试将一个辅助程序(程序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

1 个答案:

答案 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)