参考教程
- Cmake Cookbook:https://www.bookstack.cn/read/CMake-Cookbook/README.md
- Cmake官方文档:https://cmake.org/cmake/help/latest/guide/tutorial/index.html
- Cmake入门实战: https://www.hahack.com/codes/cmake/
- CMake 生成静态库与动态库:https://blog.csdn.net/zhiyuan2021/article/details/129032343
Cmake介绍
Cmake是一种支持跨平台编译的工具,允许通过配置独立的配置文件CMakeList.txt
来定制编译流程,随后在不同的平台上进一步生成本地的Makefile
和工程文件(Linux平台的Makefile
和Windows平台的Visual Studio
工程等)。在linux平台下使用Cmake编译程序的主要流程是:
1. 编写CMakeLists.txt;
2. 执行cmake PATH
生成Makefile
;
3. 执行make
编译生成可执行程序或动态/静态链接库。
Cmake使用
基础案例
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (project_name)
# 指定生成目标
add_executable(project_name main.cc)
CMakeLists.txt
的语法由命令、注释和空格组成,命令不区分大小写,#
后面的内容是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。上面的示例中CmakeLists.txt
中使用了几个常用的命令,依次是
1. cmake_minimum_required
:指定运行当前配置文件需要的最低的Cmake版本;
2. project
:指定项目名称
3. add_executable
:将main.cc
源文件编译成名为project_name
的可执行文件。
实际使用中可能有多个源文件,逐个添加源文件是一件非常麻烦的事情,可以使用aux_source_directory
命令来获取指定目录下的所有源文件,并将结果存到指定变量名中,使用示例如下:
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 指定生成目标
add_executable(Demo ${DIR_SRCS})
Cmake生成动态和静态链接库
静态和动态链接库的主要目的是为了提供接口供其他程序调用,两者的主要区别在于:
1. 静态链接库的拓展名通常为.a
或.lib
,在编译时会直接整合到目标程序中,编译成功的可执行文件可以独立运行(不再需要静态库);
2. 动态链接库的拓展名通常为.so
或.dll
,在编译时不会放到目标程序中,可执行文件无法离开动态链接库单独执行。
Cmake用于生成动态和静态链接库的命令为
# 动态链接库
add_library(project_name SHARED ${SRC_FILE})
# 静态链接库
add_library(project_name STATIC ${SRC_FILE})
Cmake引用外部库文件
Cmake中另外一个常用的使用场景是使用外部库,对于外部库,我们通常需要进行两步操作,即引入头文件和添加链接库,具体示例如下所示:
# 引入头文件所在路径
include_directories{include_path}
# 添加链接库
target_link_libraries(project_name lib_name)
其他常见的Cmkae命令
# 设置C++标准为C++14
set(CMAKE_CXX_STANDARD 14)
评论 (0)