Linux系统编程【03_Makefile】

本文详细介绍了Makefile的使用,包括命名规则、目标与依赖条件、函数运用和自动变量。通过实例展示了如何将多个源文件编译成可执行文件,并演示了清理目标的规则。此外,还提到了make命令的选项,如-n用于模拟执行。
摘要由CSDN通过智能技术生成

makefile:项目管理文件

命名规则:makefile、Makefile

一个规则:

        目标:依赖条件

        (一个tab缩进)命令

1.目标的时间必须晚于依赖条件的时间,否则更新目标

2.依赖条件如果不存在,寻找新的规则去产生依赖

3.第一组目标作为终极目标

可以利用ALL:a.out

两个函数:

        src = $(wildcard *.c):匹配当前工作目录下的所有.c文件,将文件名组成列表赋值给变量src

        obj = $(patsubst %.c, %.o, $(src)):讲参数3中($(src)),包含参数1的部分替换为参数2

        Clean:(没有依赖)

-rm -rf $(obj) a.out 删除当前目录下的a.呕吐以及所有.o文件

三个自动变量

        $@:在规则的命令中,表示规则中的目标

        $<:在规则的命令中,表示第一个依赖条件,如果将该变量应用在模式规则中,它可将依赖条件中的依赖依次取出

        $^:在规则的命令中,表示所有依赖条件

例子:将当前目录下的add.c sub.c div.c 联合编译成a.out

makefile1:        第一阶段

a.out: add.o sub.o div.o hello.o
hello.o:hello.c
    gcc -c hello.c -o hello.o
add.o:add.c
    gcc -c add.c -o add.o
sub.o:sub.c
    gcc -c sub.c -o sub.o
div.o:div.c
    gcc -c div.c -o div.o

makefile2:        第二阶段

src = $(wildcard *.c)    //add.c sub.c div.c hello.c
obj = $(patsubst %.c, %.o, $(src))    //add.o sub.o div.o hello.o

a.out:$(obj)
    gcc $(obj)-o a.out
hello.o:hello.c
    gcc -c hello.c -o hello.o
add.o:add.c
    gcc -c add.c -o add.o
sub.o:sub.c
    gcc -c sub.c -o sub.o
div.o:div.c
    gcc -c div.c -o div.o


clean:
    -rm -rf $(obj) a.out

makefile3:        第三阶段

src = $(wildcard *.c)    //add.c sub.c div.c hello.c
obj = $(patsubst %.c, %.o, $(src))    //add.o sub.o div.o hello.o

a.out:$(obj)
    gcc $^-o $@
hello.o:hello.c
    gcc -c $< -o $@
add.o:add.c
    gcc -c $< -o $@
sub.o:sub.c
    gcc -c $< -o $@
div.o:div.c
    gcc -c $< -o $@


clean:
    -rm -rf $(obj) a.out

makefile4:        模式规则、生成伪目标

src = $(wildcard *.c)    //add.c sub.c div.c hello.c
obj = $(patsubst %.c, %.o, $(src))    //add.o sub.o div.o hello.o

.PHONY: clean ALL

a.out:$(obj)
    gcc $^-o $@
%.o:%.c
    gcc -c $< -o $@

clean:
    -rm -rf $(obj) a.out

make 参数

        -n:模拟执行make命令

        -f:指定文件执行make命令

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值