Makefile和CMakeList的简介与使用

一、概念

  • gcc是一种编译器。将源代码转为可执行文件。

       当你的程序只有一个源文件时,直接就可以用gcc命令编译它。但当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大,所以出现了make工具。

  • make是一个批处理工具。在整个项目中管理编译过程。其依据是makefile文件。
  • makefile是一个文本文件,用于指挥make。其中包含一系列规则和命令。make 工具通过读取 makefile 中的规则来确定需要重新编译哪些文件,以及执行哪些命令来完成编译过程。

      makefile在一些简单的工程完全可以用人工手写,但是当工程非常大的时候,手写makefile也是非常麻烦的,并且如果换了个平台makefile又要重新修改。这时候就出现了Cmake工具。

  • cmake是一个跨平台构建工具。cmake可以更加简单的生成makefile文件给make用。
  • cmakelist是一个文本文件,用于指挥cmake。

编译(compile):代码变成可执行文件
构建(build):先编译这个,还是先编译那个(即编译的顺序安排)
Make是最常用的构建工具。也就是将编译的顺序写在一个叫Makefile的文件中。Make命令依赖这个文件进行构建。
构建规则都写在Makefile文件里面,要学会如何Make命令,就必须学会如何编写Makefile文件。

二、Makefile 

当我们修改某个文件的时候他只会编译其中修改了的文件,而不会编译其他文件,大大缩短了编译时间。

1)基本语法
  • 目标:一般是指要编译的目标,也可以是一个动作。
  • 依赖:指执行当前目标所要依赖的选项,包括其它目标,某个具体文件或库等。

    注意:一个目标可以有多个依赖,但也可以没有。

  • 命令:该目标下要执行的具体命令,可以没有,也可以有多条。但要注意,如果有多条,则每条命令写一行。

    注意:命令之前别忘了加TAB符。

2)变量

1.系统常量(可用make -p 查看)

AS汇编程序的名称,默认为 as
CCC编译期名称,默认为 cc
CPPC预编译期名称,默认为 cc -E
CXXC++编译器名称,默认为 g++
RM文件删除程序别名,默认为 rm -f

2.自定义变量

定义:变量名=变量值
使用:$(变量名), ${变量值}

3.系统变量

$*不包括扩展名的目标文件名称
$+所有的依赖文件,以空格分隔
$<表示规则中的第一个条件
$?所有时间戳比目标文件晚的依赖文件,以空格分隔
$@目标文件的完整名称
$^所有不重复的依赖文件,以空格分隔
$%如果目标是归档成员,则该变量表示目标的归档成员名称

 三、CMakeList

  • makefile是在Linux编译c或者c++代码的时候的一种脚本文件,但是每一个功能都要写一个makefile文件,这样如果这个工程很大,而且相关性比较强的话,makefile的书写就会变得相对繁琐,看起来就会特别麻烦
  • cmake是为了生成makefile 脚本文件,这样我们就不需要再去写makefile了,只需要写简单的CMakeLists.txt即可
  • cmake之后就会产生我们想要的makefile文件,然后再直接make就可以编译出我们需要的结果了
# 表示cmake的最低版本
cmake_minimum_required (VERSION 2.6)

# 表示目前编译的项目
project (day07)

# 表示当前编译使用c++14版本来编译程序
set(CMAKE_CXX_STANDARD 14)

# 表示项目的执行程序, 括号中的day07 表示最终生成的执行程序名称,  后面的表示程序的源码文件
add_executable(day07 main.cpp stu.cpp)
1)编译产生
  • 直接在当前源码目录执行cmake命令 cmake ./,但是这样会在当前目录下产生很多临时文件和目录
  • 在当前目录新建一个build目录,然后我门进入到build目录,执行命令cmake ../,这样产生的所有临时文件都会生成在build目录下,而不影响源码目录的代码

我们这里采用第二种方式:外部构建

可以看到生成了很多文件,主要的是生成makefile文件
然后执行make就可以编译,并生成可执行文件了
最后运行可执行文件

2)关系

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值