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

199 天前
 cppc

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

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 的头文件。网上有资料介绍类似的用法,我拿过来改了一下,没搞成功。

906 次点击
所在节点    C
6 条回复
oneisall8955
199 天前
这样的问题应该适合 gpt
trafalgarTaw
199 天前
subdirectory, 顶层 CMakeLists.txt 包含 app 和 lib-example 两个 subdirectory , 然后 lib-example 的 subdirectory 在前, 头文件路径什么的根路径设置好, 然后在 app 的 CMakeLists.txt 里添加一下就行了吧。 参照下 gtest 的 CMakeLists.txt 。 我只知道可以这样做可以, 也没了解过有没有更好的做法。
AFOX
199 天前
在 app 和 lib-example 的 CMaKeLists.txt 里面通过 parent_scope 设置变量,在顶层目录通过设置的变量编译链接
hz2019
198 天前
可以看看我写的这个,动态库静态库也做了区分 https://github.com/doupongzeng/modern-cpp-cuda-cmake-template
cppc
198 天前
@hz2019 #4 看着不错,我研究一下
inyqian
198 天前
好巧。前段时间刚搞了这个。
说下我的结构:
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})

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/985468

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX