初学C语言之makefile


linux中, make 用来管理多模块程序的编译和链接,直至生成可执行文件.
make 程序需要一个编译规则说明文件, 称为makefile, makefile文件中描述了整个软件工程的编译规则和各个文件之间的依赖关系.
简单理解: makefile 就像一个shell脚本, 其中可以执行操作系统的命令, 它带来的好处就是可以实现"自动编译", 一旦写好, make一下, 整个软件功能就完全自动编译, 提高了软件开发的效率.
make 是一个命令工具, 是一个解释makefile中指令的命令工具, 大多数编译器都有这个命令,使用make 可以使重新编译的次数达到最小化. 这不和dockerfile 一样吗? 这样就好理解多了

makefile的编写

makefile规则非常复杂,示例:

[root@bi hello]# vim makefile  // 生成makefile文件, 内容下面有.
[root@bi hello]# ls book1 book101  // 确实一下两个文件不存在
ls: cannot access book1: No such file or directory
ls: cannot access book101: No such file or directory
[root@bi hello]# make  // make一下, 结果执行了两条命令
gcc -o book1 book1.c
gcc -o book101 book101.c
[root@bi hello]# cat makefile  // 查看 makefile的内容
all: book1 book101   // 固定写法, 类似于申明了这个几个文件

book1:book1.c  // 说明book1依赖的文件是book1.c
                gcc -o book1 book1.c   // 编译命令, **这里必须使用一个`tab`, 不能使用空格代替.**
                cp book1 bin/.   // 将可执行文件放到另一个可以执行目录下.
book101:book101.c 
                gcc -o book101 book101.c
clean:
        rm -rf book1 book101
[root@bi hello]# vim book1.c  // 对其中一个文件进行编辑, 完事还需要重新编译
[root@bi hello]# make  // 所以再make 一下. 发现只编译了修改过的文件. 其它文件没有编译.
gcc -o book1 book1.c   
[root@bi hello]# make book101  // 仅执行这一个标签
[root@bi hello]# make clean  // 清除编译目标的动作

想象一下, 把makefile 编辑好了, 不论修改哪个文件, 反正都make一哈, 就能搞定, 这操作比较6

makefile中的变量

[root@bi hello]# vim makefile
[root@bi hello]# cat makefile
CC=gcc  // 变量引用
// CC=g++
CFLAGS=-g  // 调试时使用-g
// CFLAGS=-02  // 生产时使用-02, 使编译程序达到最优


all: book1 book101

book1:book1.c
                $(CC) $(CFLAGS) -o book1 book1.c
book101:book101.c
                $(CC) $(CFLAGS) -o book101 book101.c
clean:
        rm -rf book1 book101
[root@bi hello]#

这个操作类似C语言中的宏定义.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值