C语言学习笔记之 Makefile脚本的使用

什么是Makefile脚本:

 Makefile脚本集合了程序的编译指令的文件,make是一个命令工具,当执行make命令时,它会自动读取Makefile中的编译指令并执行,会自动完成整个项目的自动化编译工作。

为什么需要Makefile脚本:

 项目中如何有很多.c文件,它们的编译指令会有很多,需要的编译时间比较长,依赖关系非常复杂。
    当项目中的.h文件被修改时、.c文件,我们无法人为的分辨出哪些文件需要重新编译,只能全部重新编译一下,但这项操作非常耗时。
    所以使用Makefile脚本编译项目:
        1、节约时间
        2、记录文件之间依赖关系
        3、自动化执行编译过程

Makefile脚本的原理:

Makefile脚本的原理就是基于文件最后修改时间,被依赖文件的最后修改时间晚于目标文件,该文件就需要重新编译。
        hello.c > hello.o 
            gcc -c hello.c
        hello.h > hello.o 
            gcc -c hello.c

Makefile脚本的格式:

由若干个编译目标组成,它类似C语言中的函数,就是若干个编译指令组成的编译模块,默认只执行排在第一个的编译目标,也叫入口目标。

    target ... : prerequisites ...
        command
        ...
        ...

    target:编译目标,它如果不存在,或者早于它依赖的文件,那么就执行该下面的编译指令。
    prerequisites:被依赖的编译目标、文件,相当于C语言虽的函数调用。
    command:编译指令 

在Makefile脚本中可以使用变量:
    变量名=value 定义变量并给变量赋值初值
    $(变量名) 使用变量名,获取出变量的值。
    常用的变量名:
        CC=编译器
        STD=语法标准
        FLAG=检查标准,-Wall,-Werror
        TARGE=最终可执行文件的名字 
        OBJECT=所有的目标文件名
 

负责清理的编译目标:

该编译目标一般负责删除目标文件、头文件的编译结果、可执行文件。
    一般它不会被依赖,也就是不会执行,而是当需要时,在命令行通过make 目标名,手动执行。
    什么时候需要它执行:
        1、刚修改的内容,并没有发生变化,有可能是依赖有问题,代码并没有重新编译,执行它就可以删除所有目标文件、可执行文件,重新编译。
        2、更换了执行平台后,那么之前编译出的目标文件就全部不能再继续使用。
        3、项目最终上线时,会把所有的编译结果删除,重新编译。

    clean:
        rm -rf $(OBJECT) $(TARGE)
        rm -rf .h.gch

通用的Makefile文件模板:

CC=gcc
STD=-std=gnu99
FLAG=-Wall -Werror
TARGE=manager
OBJECT=main.o tools.o manager_user.o

$(TARGE):$(OBJECT)
    $(CC) $(OBJECT) -o $(TARGE) 

%.o:%.c 
    $(CC) $(STD) $(FLAG) -c $<

clean:
    rm -rf $(OBJECT) $(TARGE)
    rm -rf .h.gch

猜你喜欢

转载自blog.csdn.net/m0_62480610/article/details/125929395