Makefile 简介

一、引例:

 

#Makefile

 

objects=test1.o test2.o         

 

main:$(objects)

gcc -o main $(objects)

 

clean:

rm main $(objects)

 

二、简介:

 

中文格式:

规则的目标 : 规则的依赖

 

规则的命令行

 

英文格式:

target : prerequisites

 

command

 

介绍:

target

通常是 最后需要生成的文件名 或者 为了实现这个目的而必需的 中间过程文件名

可以是 .o文件、也可以是最后的可执行程序的文件名等。

另外,目标也可以是一个make执行的动作的名称,如目标“clean”,我们称这样的目标是伪目标

 

prerequisites

生成规则目标所需要的文件名列表。

通常一个目标依赖于一个或者多个文件

 

ommand:

执行规则所用的命令行语句

注意:每一个命令行必须以[Tab]字符开始

          [Tab]字符告诉 make 此行是一个命令行。make 按照命令完成相应的动作。

    这也是书写 Makefile 中容易产生,而且比较隐蔽的错误。

 

三、规则与相关语句

 

()  换行处每行的最后都要加上  “ / ”

 

()  指定变量:

在上面的引例中objects=test1.o test2.o  中的 objects 就是作为指定变量出现。

因为 test1.o test2.o  这两个.o 文件在下面的程序当中出现了不止一次,类似C语言中的宏定义

如果需要更改的时候只需要改最上面的指定变量就可以了。

 

作用:不但减少书写的工作量,而且可以减少修改而产生错误的可能。

使用:  $(objects)      // 语句中前面加空格

 

()  清除工作目录过程文件:

在上面的引例中,clean:    rm main $(objects) 中 clean 就作为清除操作。

 

作用:为了实现清除当前目录中编译过程中产生的临时文件。

使用:   clean :

rm main $(objects)

但是通常我们要写成:

.PHONY : clean

clean :

-rm main $(objects)

目的: 1)通过“.PHONY”特殊目标将“clean”目标声明为伪目标。

    避免当磁盘上存在一个名为“clean”文件时,目标“clean”所在规则的命令无法执行。

      2)在命令行之前使用 “-”,意思是忽略命令“rm”的执行错误。

 

注意: 这样的一个目标在 Makefile 中,不能将其作为终极目标Makefile 的第一个目标)。

     因为我们的初衷并不是当你在命令行上输入 make 以后执行删除动作。而是要创建或者更新程序

     在我们上边的例子中,就是在输入 make 以后要需要对目标“edit”进行创建或者重建。

 

四、在终端里使用执行Makefile

 

(一)  在当前目录下  sudo make

(二)  输入密码后 提示 最终目标已经更新到最新

(三)  在当前目录下  sudo ./main      // main为最终目标名字

(四)  显示 程序的界面

 

 

 

 

 

   

 

posted @ 2022-01-19 12:47  王回甘  阅读(46)  评论(0编辑  收藏  举报