Makefile用法详解

之前介绍过gcc了,这篇文章主要是在gcc之后为了方便我们对于对文件的编译!


本章分为两个部分:             Makefile基本写法        Makefile变量替换写法

废话不多写,直接开干!

Makefile基本写法:

本工程中包括以下文件:(程序内容参原子哥Makefile章节!) 

由之前的gcc可知,我们可以直接编译,但是麻烦,所以我们现在对Makefike文件进行书写(名字要Makefile!),内容如下:

ljs: main.o input.o calcu.o 
	gcc -o ljs main.o input.o calcu.o 
main.o: main.c
	gcc -c main.c
input.o: input.c
	gcc -c input.c
calcu.o: calcu.c
	gcc -c calcu.c
clean: 
	rm *.o
	rm ljs

代码分析:执行下面make

可执行文件ljs依赖于这三个.o文件,然后对这三个.o文件进行编译

                main.o依赖于main.c。然后对main.c进行编译

 代码分析:执行下面make clean

    

 通过以上Makefile设置,那么我们在改动其中一个程序后,系统只会编译被改变的,没有修改的则不会变动,结果如下:

总结:这种写法容易理解,但是比较麻烦,下面介绍的变量替换则会更简单!


Makefile变量替换                写法:

 

程序分析:设置字符串main.o input.o calcu.o并使其赋值给objects

                $是表示变量的前缀,也就是ljs依赖于变量objects

                %.c表示所有.c文件

                其他内容一样

对文件进行make和make clean可以得到一样的效果。 


Makefile中 = 的使用

1.“=”

  1 name = ljs
  2 curname = $(name)
  3 name = liujiasen

此时curname = liujiasen,采取了第二次赋值。因为 = 赋值采用后面定义

2.“:=”

  1 name = ljs
  2 curname := $(name)
  3 name = liujiasen

此时curname =ljs,采取了第一次赋值。因为 := 赋值采用前面定义

3.”?=“

  1 name = ljs
  2 curname ?= liujiasen
  3 name = liujiasen

此时curname =liujiasen,采取了第一次赋值。因为 ?= 赋值采用如果前面没赋值就用当前赋值


伪目标

为了防止Makefile中的clean和外部存在一个clean文件同名而不执行Makefile中的clean

  8 .PHONY:clean
  9 clean:
 10     rm *.o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值