Mkaefile的基本编写

Makefile的出现
什么是Makefile,有什么欲求导致Makefile的出现?
现实要求:
在实际开发中,不可能把所有程序放在一个.c文件里,否则会使代码臃肿,功能划分不明确,不利于程序员看代码。
即使做到了模块、功能、类型的划分,把它们放在不同的.c文件里,但如果只是改了一个文件,整个可执行的文件就要重新编译。(使工作量增加,出错率增加)

Makefile的优势
在Makefile里,我们可以根据自己对模块、类型、功能的需要,指定编译规则==》指定哪些文件要先编译(比如头文件),哪些文件要后编译,哪些文件要重新编译(如修改过的文件)
优势:①减少了不必要的编译错误②可以实现自动化编译,只需要在终端输入一个make指令,就可以把所有的.c文件根据Makefile规则编译成可执行文件。

Makefile规则
格式:[target]:[prerequisites]
(tab) [command]

target(目标文件):可以是.o文件也可以是可执行文件。
prerequisites:是要生成target文件所需要的文件。
command:把prerequisites生成target的命令。

就是说,当prerequisites中有文件比target中的文件新时,就会执行command规定的命令。

例:有add.c sub.c main.c 三个文件,要生成名字为demo的可执行文件。

demo:add.o sub.o main.o
    gcc add.o sub.o main.o \
-o demo
add.o:add.c
    gcc add.c -o add.o
sub.o:sub.c
    gcc sub.c -o sub.o
main.o:main.c
    gcc main.c -o main.o
.PHONY:clean
clean :
    rm -f add.o sub.o main.o

Makefile的变量

OBJ=main.o add.o sub.o
CC=gcc

demo:$(OBJ)
    $(CC) $(OBJ) \
    -o demo
add.o:add.c
    $(CC) add.c -o add.o
sub.o:sub.c
    $(CC) sub.c -o sub.o
main.o:main.c
    $(CC) main.c -o main.o
.PHONY:clean
clean :
    rm -f $(OBJ)

makefile中包含了5样:生成规则、隐晦规则、变量定义、文件指示和注释

隐晦规则
make支持自动推导功能,只要make看到一个.o文件它就会把同名的.c文件放在依赖关系中,并且command也会自动推导出来。

OBJ=main.o add.o sub.o
CC=gcc

demo:$(OBJ)
    $(CC) $(OBJ) \
    -o demo
add.o:add.c

sub.o:sub.c

main.o:main.c

.PHONY:clean
clean :
    rm -f $(OBJ)

清空.o文件件
有利于重新编译,也利于保持文件的清洁
这是标准格式:

.PHONY:clean
clean :
    rm -f $(OBJ)

一般格式:

clean :
    rm -f $(OBJ)

通配符的使用
通配符可以使我们的Makefile简化
通配符有 * 、? 、… 、
*.c:表示所有 后缀为.c 的文件。
*:表示*

OBJ=*.o 
CC=gcc

demo:$(OBJ)
    $(CC) $(OBJ) \
    -o demo
add.o:add.c
    $(CC) add.c -o add.o
sub.o:sub.c
    $(CC) sub.c -o sub.o
main.o:main.c
    $(CC) main.c -o main.o
.PHONY:clean
clean :
    rm -f $(OBJ)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值