cmake终极奥义

本文详细介绍了cmake的使用,包括初识cmake、安装、helloworld示例、内部与外部构建、处理多个源文件、自定义编译选项、定制安装规则以及支持gdb调试。通过实例演示,帮助读者掌握cmake在项目构建中的应用。
摘要由CSDN通过智能技术生成

一、初识cmake

cmake集中开源,跨平台,能够管理大型项目,简化编译构建过程和编译过程,高效率,可扩展于一体,简单而强大的项目构建工具

二,安装cmake

一般不需要安装,cmake目前已经成为各大Linux发行版提供的组件,所以,需要自己动手安装的可能性很小。如果你使用的操作系统(比如Windows或者某些Linux版本)没有提供cmake或者包含的版本较旧,建议你直接从cmake官方网站下载安装。

cmake官网:https://cmake.org/download/

三、初试cmake – cmake的helloworld

Hello world,世界 你好

一个最简单的例子Helloworld来演练一下cmake的完整构建过程

1、准备工作:

本节对应的源代码所在目录:Demo1。

新建一个 demo1 文件,目录结构如下

[root@ecs-x-medium-2-linux-20200312093025 cmake]# pwd
/root/cmake
[root@ecs-x-medium-2-linux-20200312093025 cmake]# tree
.
└── demo1

1 directory, 0 files

所有的cmake练习都会放在/root/cmake的子目录下

在demo1目录新建main.c和CMakeLists.txt (注意文件名大小写):

main.c

#include <stdio.h>
int main()
{
   printf("Hello World!\n");
   return 0;
}

CmakeLists.txt

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (demo1)

# 指定生成目标  将名为 main.c 的源文件编译成一个名称为 Demo 的可执行文件。
add_executable(demo main.c)

CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的。符号 # 后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。

对于上面的 CMakeLists.txt 文件,依次出现了几个命令:

  1. cmake_minimum_required:指定运行此配置文件所需的 CMake 的最低版本;

  2. project:参数值是 demo1,该命令表示项目的名称是 demo1 。

  3. add_executable:将名为 main.c 的源文件编译成一个名称为 Demo 的可执行文件

2、开始构建

所有的文件创建完成后,demo1目录中应该存在main.c和CMakeLists.txt两个文件,如下所示

[root@ecs-x-medium-2-linux-20200312093025 cmake]# tree
.
└── demo1
    ├── CMakeLists.txt
    └── main.c

1 directory, 2 files

编译项目

之后,在 demo1 目录执行 cmake . ,得到 Makefile 后再使用 make 命令编译得到 Demo1 可执行文件。

[root@ecs-x-medium-2-linux-20200312093025 demo1]# ls
CMakeLists.txt  main.c
[root@ecs-x-medium-2-linux-20200312093025 demo1]# cmake .
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /root/cmake/demo1
[root@ecs-x-medium-2-linux-20200312093025 demo1]# make
Scanning dependencies of target demo
[100%] Building C object CMakeFiles/demo.dir/main.c.o
Linking C executable demo
[100%] Built target demo
[root@ecs-x-medium-2-linux-20200312093025 demo1]# ./demo 
Hello World!

3、清理工程:

跟经典的autotools系列工具一样,运行:

make clean

即可对构建结果进行清理

四、内部构建 与 外部构建

上面的例子展示的是“内部构建”,相信看到生成的临时文件比你的代码文件还要多的时候,估计这辈子你都不希望再使用内部构建!

对于cmake,内部编译上面已经演示过了,它生成了一些无法自动删除的中间文件,所以,引出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值