标签搜索
C++

Cmake常用指令学习

lishengxie
2023-03-18 / 0 评论 / 14 阅读 / 正在检测是否收录...

参考教程

  1. Cmake Cookbook:https://www.bookstack.cn/read/CMake-Cookbook/README.md
  2. Cmake官方文档:https://cmake.org/cmake/help/latest/guide/tutorial/index.html
  3. Cmake入门实战: https://www.hahack.com/codes/cmake/
  4. 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

评论 (0)

取消