Makefile学习笔记

makefile 就是目标文件加上依赖文件

hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello

规则
targets (目标) :prerequisites(依赖)

command(命令)

.Makefile 由若干条的规则构成
.每个规则又是这样的:
targets (目标) :prerequisites(依赖)

command(命令)
rule1

rule2

rule3

在命令前加@就不会输出命令
例: @gcc …

伪目标没有依赖文件,不会在磁盘上建立文件只会执行命令
如: clean:
rm fun1.o fun2.o main.o hello
.PHONY:伪目标名
伪目标:
命令
为了防止当前文件夹下有同名的文件

变量定义 Mobj = main.o func1.o func2.o
$(变量名)用变量 gcc $(Mobj) -o hello

预定义变量:
AR 库文件维护程序的名称,默认值为ar
AS 汇编程序的名称,默认值为as
CC c编译器的名称,默认值为cc
CXX C++编译器名称,默认值为g++
ARFLAGS 库文件维护程序选项,无默认值
CFLAGS C编译器选项,无默认值
CXXFLAGS C++编译器选项,无默认值
例:CFLAGS = -g -c -WALL
CC = gcc

$(CC) $(CFLAGS) func2.c
//换编译器时只需改 变量CC的值

自动变量及环境变量
$* 不包含扩展名的目标文件名称
$< 第一个依赖文件名称
$@ 目标文件完整名称
$^ 所有不重复的依赖文件
例: hello:$(Mobj)
gcc $^ -o $@

make 工作流程
1、make会在当前目录下找名字叫”Makefile”或”makefile”的文件。
2、如果找到,它会找文件中的第一个目标文件(target)并把这个文件作为最终的目标文件
3、根据时间戳生成目标文件
4、递归去寻找目标文件依赖文件,并且递归生成(同样有时间戳问题)。

包含:
include 另一个Makefile文件名 联合编
嵌套
subsystem:
cd subdir &&gcc -c main.c
等价于:subsystem:
gcc -c main.c -C subdir
意思是先进入“subdir”目录,然后执行make

 

条件判断
ifeq( , )
命令
else
命令
endif

makefile 管理命令
-C dir 读入指定目录下面的makefile
-f file 读入当前目录下的file文件为makefile
-i 忽略所有命令执行错误
-I dir 指定被包含的makefile所在目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值