V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cppc
V2EX  ›  C

不熟悉 cmake,请教一下多模块项目的 cmake 写法

  •  
  •   cppc · 2023-10-26 00:13:37 +08:00 · 1118 次点击
    这是一个创建于 389 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目结构是两个子模块,目录如下

    PROJECT-ROOT
    │  CMakeLists.txt
    │
    ├─app
    │  │  CMakeLists.txt
    │  │
    │  ├─include
    │  │      misc.h
    │  │
    │  └─src
    │          main.cpp
    │
    └─lib-example
        │  CMakeLists.txt
        │
        ├─include
        │      lib.h
        │
        └─src
                lib.cpp
    

    app 是可执行文件,lib-example 是动态库。app 这个项目需要动态链接到 lib-example,并且使用 lib-example 的头文件。网上有资料介绍类似的用法,我拿过来改了一下,没搞成功。

    6 条回复    2023-10-27 09:34:56 +08:00
    oneisall8955
        1
    oneisall8955  
       2023-10-26 00:17:59 +08:00 via Android   ❤️ 1
    这样的问题应该适合 gpt
    trafalgarTaw
        2
    trafalgarTaw  
       2023-10-26 00:29:19 +08:00   ❤️ 1
    subdirectory, 顶层 CMakeLists.txt 包含 app 和 lib-example 两个 subdirectory , 然后 lib-example 的 subdirectory 在前, 头文件路径什么的根路径设置好, 然后在 app 的 CMakeLists.txt 里添加一下就行了吧。 参照下 gtest 的 CMakeLists.txt 。 我只知道可以这样做可以, 也没了解过有没有更好的做法。
    AFOX
        3
    AFOX  
       2023-10-26 09:20:48 +08:00
    在 app 和 lib-example 的 CMaKeLists.txt 里面通过 parent_scope 设置变量,在顶层目录通过设置的变量编译链接
    hz2019
        4
    hz2019  
       2023-10-26 16:06:31 +08:00   ❤️ 1
    可以看看我写的这个,动态库静态库也做了区分 https://github.com/doupongzeng/modern-cpp-cuda-cmake-template
    cppc
        5
    cppc  
    OP
       2023-10-26 22:50:54 +08:00
    @hz2019 #4 看着不错,我研究一下
    inyqian
        6
    inyqian  
       2023-10-27 09:34:56 +08:00
    好巧。前段时间刚搞了这个。
    说下我的结构:
    bind:生成的库和测试程序
    src:我要开发的 sdk 库,
    src/base
    test:测试 demo.
    test/include:sdk 的头文件
    src 下的 cmakeLists:
    #设置生成的库的位置
    set(LIBRARY_OUTPUT_PATH ../../bind)
    #设置源文件
    aux_source_directory(base COMMON_DIR)
    其余的文件夹就不展示了
    #生成 xxx.so 的动态库
    add_library(${project_name} SHARED ${COMMON_DIR})

    test 下的 cmakeList
    主要就是下面的配置,去找到这个库
    #链接 solomon 库
    find_library(xxx xxx ../bind)
    target_link_libraries(${project_name} ${xxx})
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3600 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:38 · PVG 12:38 · LAX 20:38 · JFK 23:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.