makefile是用于节约工程编译的时间的。如果是刚刚接触unix的同学可能不能理解节省编译时间的功效,毕竟刚刚入门的时候编写的代码都是比较短的,编译时间就是几秒钟,根本无需节约时间。假设你的工程工程文件接近一千个,你需要修改其中一个的时候,如果没有makefile,你需要重新编译和链接所有文件。如果有makefil的时候只需要根据时间戳,判断目标文件和依赖文件的时间顺序就可以只编译修改过的文件,这样就节约很多时间啦。
makefile的书写格式:
目标:依赖
<TAB键>命令
解析一下:
目标就是你需要生成的目标文件
依赖:依据这个来生成目标文件,常见的 点C文件(.c),或者点O(.o)文件
TAB键:这个很重要,不能用空格来代替,事实上就是一个标志,表明后面的是需要执行的Shell语句。
1创建一个.c文件,
int main(int argc,int *argv[])
{
printf("hello world!\n");
return 0;
}
2创建一个名字为makefile或者Makefile的没有后缀的普通文件
main:main.c
gcc main.c -o main
3代码运行结果,由于我是使用Notepad++,写的代码,所以存放的位置是y_share的一个共享文件夹里面。
makefile的变量
变量类似C语言的宏,主要有以下的几点
1,变量和函数的展开是在make读取makefile文件的时候进行的
2,变量可以代表很多的,例如:文件名列表,编译选项列表,选项的参数列表,搜索源文件的目录列表,编译输出的目录列表。
3,变量名一般都是数字,字母,下划线,和C语言的基本一致,虽然允许使用“.”,"#"."=",前置空白和尾置空白的任意字符,但是不建议这样使用,因为这些有可能在以后的make版本中赋予其他特殊的含义。
4,变量名是大小写敏感的。wo和WO和Wo是不一样的,为了规范编译风格,建议objects(目标文件列表使用小写),参数列表使用大写(如编译选项CFLAGS)。
5,自动变量,只包含特殊符号例如:“<”,"@","?","*","@D","%F","^D"
6,变量的引用:
具体的代码示例
运行结果: