前言本文通过几个简单的例子,快速了解Makefile的基本用法,适用于编译我们平时在实践中编写的少量代码。1、make命令Makefile文件内容:都是目标,没有依赖文件,这个Command是打印(echo)一行"HelloMakefile"all:echo"HelloMakefile"运行make后,终端打印的内容$makeecho"HelloMakefile"HelloMakefile可以看到,命令的Makefile也是打印在终端上的。如果不想输出命令的内容,可以在命令前加上@make来指定生成的目标。如果未指定,第一个目标将是默认目标。我们修改一下Makefile文件的内容all:@echo"HelloMakefile"test:@echo"HelloTest"运行不同的命令,可以看到不同的打印信息$makeHelloMakefile$makeallHelloMakefile$maketestHelloTest2.生成文件假设有两个文件fun.c和main.c,需要用Makefile生成一个可执行文件app。fun.c#includevoidfun(){printf("Thisisfun()!\n");}main.c的内容externvoidfun();intmain(){乐趣();返回0;}Makefile内容全部:main.ofun.ogcc-oappmain.ofun.omain.o:main.cgcc-omain.o-cmain.cfun.o:fun.cgcc-ofun.o-cfun.cclean:rmappmain.ofun.o执行make命令后,终端会打印如下内容,并生成对应的app、main.o、fun.o文件gcc-omain.o-cmain.cgcc-ofun.o-cfun.cgcc-oappmain.ofun.o3。清除文件还是上面的Makefile和源文件,我们可以通过输入makecleanfiles来清除新生成的3个文件。打印信息如下:$makecleanrmappmain.ofun.o如果makfile目录下有一个名为clean的文件,make之后执行makeclean会怎样?我们输入touchclean生成一个空文件,然后执行makeclean观察现象$touchclean$makeclean$make:'clean'isuptodate.这时候make提醒clean文件是最新的,而不是进行cleanup操作。为了解决这个问题,我们不得不引入伪目标。伪目标伪目标是使用“.PHONY”关键字定义的,并且必须是大写字母。修改上面的Makefile.PHONY:cleanall:main.ofun.ogcc-oappmain.ofun.omain.o:main.cgcc-omain.o-cmain.cfun.o:fun.cgcc-ofun.o-cfun.cclean:rmappmain.ofun.o输入makeclean,我们会发现此时可以正常进行清理操作了。makefile内容的注释在Makefile文件中。我们需要为一些内容写一些评论,或者暂时不需要。如果我们想把它注释掉,我们应该怎么做呢?很简单,只需要在需要注释的行前面加上#,像这样#ThisisthecommentoftheMakefile#all:main.ofun.o.PHONY:cleanall:main.ofun.ogcc-oappmain.ofun.omain.o:main.cgcc-omain.o-cmain.cfun.o:fun.cgcc-ofun.o-cfun.cclean:rmappmain.ofun。o本文介绍的Makefile可以应对多个文件的编译。在实际项目中,会有几十个或上百个文件。如果按照文件名一个一个写,效率太低,而且不易维护。在接下来的文章中,我将介绍Makefile的变量和函数。使用它们,我们的Makefile可以大大提高效率,方便维护。