【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

目录
相关文章
|
2月前
|
C语言 Windows
使用CMake调用Makefile 项目
使用CMake调用Makefile 项目
27 0
|
8天前
|
测试技术
使用CLion创建Cmake项目,使用GoogleTest和GoogleMock对代码进行测试
使用CLion创建Cmake项目,使用GoogleTest和GoogleMock对代码进行测试
20 3
|
iOS开发 MacOS
CMake基础:CMake中的常用变量的命令
CMake基础:CMake中的常用变量的命令
23 0
|
2月前
|
存储 缓存 IDE
CMake之编写属于自己的Findxxx.cmake文件:定义一个定制化的CMakeLists.txt文件
CMake之编写属于自己的Findxxx.cmake文件:定义一个定制化的CMakeLists.txt文件
41 1
|
2月前
CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法
CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法
26 2
|
8月前
|
C++
Cmake生成指定vs版本的工程文件
本文简单总结了使用 cmake 生成 visual studio 工程文件的过程
|
6月前
|
存储 Cloud Native Linux
CMake学习之第一个cmake
CMake学习之第一个cmake
|
11月前
|
机器人 Linux 编译器
替代notepad++,notepad--介绍及插件cmake编译
替代notepad++,notepad--介绍及插件cmake编译
|
11月前
|
编译器 Linux C++
QT的cmake项目工程配置
QT的cmake项目工程配置
cmake指定输出安装目录
cmake指定输出安装目录
141 0