Mkaefile的基本编写

来源:互联网 发布:wifi mac地址修改器 编辑:程序博客网 时间:2024/06/06 07:38

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 demoadd.o:add.c    gcc add.c -o add.osub.o:sub.c    gcc sub.c -o sub.omain.o:main.c    gcc main.c -o main.o.PHONY:cleanclean :    rm -f add.o sub.o main.o

Makefile的变量

OBJ=main.o add.o sub.oCC=gccdemo:$(OBJ)    $(CC) $(OBJ) \    -o demoadd.o:add.c    $(CC) add.c -o add.osub.o:sub.c    $(CC) sub.c -o sub.omain.o:main.c    $(CC) main.c -o main.o.PHONY:cleanclean :    rm -f $(OBJ)

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

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

OBJ=main.o add.o sub.oCC=gccdemo:$(OBJ)    $(CC) $(OBJ) \    -o demoadd.o:add.csub.o:sub.cmain.o:main.c.PHONY:cleanclean :    rm -f $(OBJ)

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

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

一般格式:

clean :    rm -f $(OBJ)

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

OBJ=*.o CC=gccdemo:$(OBJ)    $(CC) $(OBJ) \    -o demoadd.o:add.c    $(CC) add.c -o add.osub.o:sub.c    $(CC) sub.c -o sub.omain.o:main.c    $(CC) main.c -o main.o.PHONY:cleanclean :    rm -f $(OBJ)
原创粉丝点击