目录
一、Linux系统中的make命令与makefile文件
在linux系统中make是一个非常重要的编译命令,不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或makeinstall。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile 带来的好处就是“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
二、makefile文件的编写
先简单写一个 test.c 文件
#include<stdio.h>
int main()
{
printf("Hello world!!!");
return 0;
}
再写一个makefile文件
test.exe:test.c
gcc -o test.exe test.c
.PHONY:clean
clean:
rm -f test.exe
输入make,即可完成文件编译,输入make clean 即可完成文件清除。
mikefile文件详解如下图:
在写依赖方法时,我们可不可以用某种占位符来代替目标文件与源文件?进一步,可不可以用某个变量名来代替,目标文件名与源文件名?
对于第一个问题,我们可以用$@来代替目标文件,$^来代替源文件;对于第二个问题,makefile文件支持赋值语句,如下面代码:
bin=test.exe
src=test.c
$(bin):$(src)
gcc -o $@ $^
.PHONY:clean
clean:
rm -f $(bin)
由上图我们发现,在使用make语句时,会将依赖关系打印出来,那依赖关系语句可以不打印吗?可以使用其他语句来打印我们想打印的内容吗?
对于第一个问题,我们可以在依赖关系前价格@;对于第二个问题,我们可以增加其他Linux命令语句,如下面代码:
bin=test.exe
src=test.c
$(bin):$(src)
@gcc -o $@ $^
@echo "compiler $(src) to $(bin)..."
.PHONY:clean
clean:
@rm -f $(bin)
@echo "clean project..."
执行效果如下:
总结
通过以上内容,我们可以快速的写出一个实用的makefile文件。