首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将另一个程序集成到用CMake编译的现有程序中

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

Stack Overflow用户
提问于 2014-02-04 21:49:44
回答 1查看 192关注 0票数 0

我正在尝试将一个附带程序(程序B)集成到使用CMake编译/构建的现有程序(程序A)中。目前,CMake处理查找程序A的所有资源,并编译程序A。我希望包括程序B所指向的几个.h文件,这样我就可以将B程序的一些.c代码嵌入到程序A中。

我尝试使用其中一个CMakeLists.txt文件,甚至将一些.c文件添加到add_library()块中,但在编译时仍然收到“未定义的THIS_FUNCTION引用”错误。

谢谢您抽时间见我!

编辑:下面是我在CMakeList.txt上更新的RPi文件的一部分

代码语言:javascript
复制
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

代码语言:javascript
复制
rtl-sdr/
    CMakeLists.txt
    build/
    cmake/
    include/
    m4/
    src/
        CMakeLists.txt
        gpu_fft/
            makefile
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-04 23:06:08

我认为您最好将程序B作为共享库来构建,并在程序A的include_directories中添加程序B的包含,然后将target_link_libraries添加到程序A中。

编辑:

我想到的是一个具有此文件夹结构的项目:

代码语言:javascript
复制
projA/
    CMakeLists.txt
    include/
    src/
    B/ 
       CMakeLists.txt
       include/
       src/

B中的CMakeLists.txt非常经典,并构建了共享库libB.so (例如在linux上,.dll在WIN32上)。

在CMakeLists.txt of projA文件夹中放置:

代码语言:javascript
复制
# 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:要构建共享库,可以设置:

代码语言:javascript
复制
OPTION(BUILD_SHARED_LIBS TRUE)

或者简单的

代码语言:javascript
复制
SET(BUILD_SHARED_LIBS TRUE)

编辑3:您也可以简单地使用它作为外部库。首先设置库搜索路径:

代码语言:javascript
复制
LINK_DIRECTORIES(${yourPathToLibB})

别忘了

代码语言:javascript
复制
include_directories("${yourPathToLibB}/include") 

也是。然后就这么做

代码语言:javascript
复制
TARGET_LINK_LIBRARIES(A B)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21564242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档