CMake使用教程:快速上手CMake/CMakelist.txt(一)

0. 引言

CMake是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个库。

但是我在刚刚入手CMake时没有比较合适的介绍教程,CMake官网教程 中复杂的内容使得很多人难以静下心仔细学习,往往会最后放弃CMake的搭建环境,而目前有很多IDE都是基于CMake搭建或者支持CMake,例如我最喜欢的CLion,所以我总结后写下了这篇简短文档来介绍CMake的使用。

用CMake所必不可少的文档则是CMakeList.txt,本文将对CMakeList.txt的基本实现功能进行介绍,然后将对基本命令进行总结。

1. 如何使用CMake运行程序C/C++

我们以C程序为例,运行一个简单的C程序我们需要在CmakList.txt中写上以下代码:

cmake_minimum_required(VERSION 2.8)		//指定CMake的最小版本
set(CMAKE_C_STANDARD 11)				//C语言执行标准
project(app_project)					//这个是你的总项目名称,可以自己定义
add_executable(myapp main.c)			//myapp是run/debug的项目名称,可以自己定义
										//值得注意的是,main.c是你的主函数

在这段代码中,add_executable()是核心所在,它决定了你将要执行什么代码,如果你又自定义了多个外部函数,那你应该将他们都加入该代码段中,比如:

add_executable(myapp main.c hello.c hello.h)

当你的项目比较大时,你可能又多个头文件以及外部函数文件,这个时候你可以通过归类,将你的头文件放到一个文件夹中,将外部函数文件再放入一个文件夹中。我们这里假设你将头文件都放入include文件夹中,将外部函数文件放入src文件中,这个时候我们可以这样写

cmake_minimum_required(VERSION 2.8)		
project(app_project)					
FILE(GLOB SCR ${PROJECT_SOURCE_DIR}/scr/*.c)		//搜索所有src下的c文件
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)	//标记include文件为头文件夹
add_executable(myapp main.c ${SCR})					//注意这个时候一定要把${SCR}加入							

C++与之类似,不再赘述

2. 如何使用CMake生成静态库(动态库)

当我们希望将自己的代码打包成静态库(动态库)供成其他模块引用的时候,则需要以下命令

add_library()
target_link_library()

我们仍然以上文所述例子为代表,通过代码来解释这个函数是如何使用的:

cmake_minimum_required(VERSION 2.8)		
project(app_project)					
FILE(GLOB SCR ${PROJECT_SOURCE_DIR}/scr/*.c)		
FILE(GLOB HEADER ${PROJECT_SOURCE_DIR}/include/*.h)
add_library(pack ${SCR} ${HEARDER})					//将所需打包文件打包成静态库				

之后build程序可创建libpack.a,如果希望封装成动态库,则可修改函数

add_library(pack SHARE ${SCR} ${HEARDER})									

3. 如何使用CMake引入外部静态库(动态库)

当我们希望引用他人封装好的静态库(动态库)模块的时候,则需要以下命令

target_link_library()		

下面我们根据上文所封装好的libpack.a

cmake_minimum_required(VERSION 2.8)		
project(app_project)					
target_link_library(myapp pack)						//调用静态库中的libpack.a
add_executable(myapp main.c)	

动态库相似,不再赘述

参考文献

[1] Kiefer M. CMake by Example[EB/OL]. Medium. 2018-06-27/2020-04-08. https://mirkokiefer.com/cmake-by-example-f95eb47d45b1.
[2] Dündar O. CMake Tutorial[EB/OL]. Medium. 2018-10-07/2020-04-08. https://medium.com/@onur.dundar1/cmake-tutorial-585dd180109b.
[3] CMake Tutorial — CMake 3.17.0 Documentation[EB/OL]. /2020-04-08. https://cmake.org/cmake/help/latest/guide/tutorial/index.html.
[4] Quick CMake Tutorial - Help | CLion[EB/OL]. /2020-04-08. https://www.jetbrains.com/help/clion/quick-cmake-tutorial.html.


版权声明:本文为wyx963323759原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。