项目结构是两个子模块,目录如下
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 的头文件。网上有资料介绍类似的用法,我拿过来改了一下,没搞成功。
1
oneisall8955 2023-10-26 00:17:59 +08:00 via Android 1
这样的问题应该适合 gpt
|
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 。 我只知道可以这样做可以, 也没了解过有没有更好的做法。
|
3
AFOX 2023-10-26 09:20:48 +08:00
在 app 和 lib-example 的 CMaKeLists.txt 里面通过 parent_scope 设置变量,在顶层目录通过设置的变量编译链接
|
4
hz2019 2023-10-26 16:06:31 +08:00 1
可以看看我写的这个,动态库静态库也做了区分 https://github.com/doupongzeng/modern-cpp-cuda-cmake-template
|
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}) |