【cmake】 --- 一个完整的cmake工程示例

简介: 【cmake】 --- 一个完整的cmake工程示例

背景:工作需求,最近开始接触cmake,由于之前都是用makefile管理工程的,所以一下适应不了,在网上找了一圈,自己整理了一个完整的用cmake管理的工程,废话少说,上菜。

1. 工程tree图

对整个工程目录结构做简单的说明:

1> 顶层目录

其中how_to_generate_sharedLibrary目录是用来生成动态库的示例

thirdparty中存放了生成动态库的头文件和.so文件

2. 各级CMakeLists.txt讲解

1> 顶层CMakeLists.txt讲解

cmake_minimum_required(VERSION 3.5)
project(HelloWorld)
set(CMAKE_C_STANDARD 99)
include_directories(hello/include world/include thirdparty/include)
link_directories(thirdparty/lib)
set(DIR_SRCS ./src/main.c)
add_subdirectory(hello)
add_subdirectory(world)
add_executable(HelloWorld ${DIR_SRCS})
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/thirdparty/lib)
target_link_libraries(HelloWorld hello world calc_library)

逐行解释如下:

// 指定cmake最小可以接受的版本
cmake_minimum_required(VERSION 3.5)
//指定project名字
project(HelloWorld)
// 用set可以设置变量值,这里指定尊书c99标准
set(CMAKE_C_STANDARD 99)
//指定要包含的头文件路径,这里指出了路径,后面在代码中就可以直接用一层包含头文件就可以了
// 不需要在类似中的包含 #include “…/include/xxx.h”;
// 直接 #include "xxx.h"即可
include_directories(hello/include world/include thirdparty/include)
// 指定链接动态库的路径
link_directories(thirdparty/lib)
// 设定DIR_SRCS变量值为 ./src/main.c
set(DIR_SRCS ./src/main.c)
// 进入子文件夹hello,去执行子文件夹下的CMakeLists.txt
add_subdirectory(hello)
// 指定生成的项目名为HelloWorld,DIR_SRCS为其所依赖的源文件
add_executable(HelloWorld ${DIR_SRCS})

2> hello子文件夹CMakeLists.txt分析

include_directories(./include)
set(DIR_SRCS ./src/hello.c)
add_library(hello SHARED ${DIR_SRCS})

子文件夹下不需要再指定cmake版本,编译器版本等

world子文件夹与其类似,不再分析

3. how_to_generate_sharedLibrary — cmake生成动态库以及使用

各个不同的部门之间会存在技术壁垒,或者说分工明确,部门之间不开放源代码,就会给对方一个库和头文件即可

3.1 tree图

3.2 CMakeLists.txt分析

cmake_minimum_required(VERSION 3.5)
project(calc_library)
# 根据库文件代码生成动态库
add_library(calc_library SHARED src/calc.c)
# 创建动态库别名
add_library(calc::library ALIAS calc_library)
# 包含指定头文件所在的目录
target_include_directories(calc_library PUBLIC  ${PROJECT_SOURCE_DIR}/include)
# 创建可执行程序
add_executable(calc_binary 
src/main.c
)
# 链接动态库文件
target_link_libraries(calc_binary PRIVATE calc::library)

4. thirdparty文件夹

thirdparty文件夹下分两个文件夹include 和 lib,分别存放头文件和.so库文件

5. 完整工程下载路径

https://download.csdn.net/download/weixin_42445727/85005764

相关文章
|
6月前
|
Windows
CMake基础(5)安装项目
CMake基础(5)安装项目
82 3
|
6月前
|
程序员 API 数据库
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
156 1
|
6月前
|
C语言 Windows
使用CMake调用Makefile 项目
使用CMake调用Makefile 项目
105 0
|
3月前
onnxruntime cmake配置
onnxruntime cmake配置
62 2
|
3月前
CMake自动打包--Qt项目
CMake自动打包--Qt项目
56 0
|
3月前
clion中cmake配置含义
clion中cmake配置含义
103 0
|
5月前
|
Unix
深入理解 CMake 的 `cmake --build` 命令
深入理解 CMake 的 `cmake --build` 命令
654 1
|
6月前
|
IDE Unix 测试技术
CMake基础(10)使用ninja构建
CMake基础(10)使用ninja构建
1079 1
|
6月前
|
存储 缓存 Unix
CMake基础(6)生成类型
CMake基础(6)生成类型
37 1
|
6月前
|
缓存 算法 开发者
【cmake 基础小知识】如何在CMake项目中使用add_dependencies命令管理目标依赖关系
【cmake 基础小知识】如何在CMake项目中使用add_dependencies命令管理目标依赖关系
466 0