Ubuntu下学习Makefile
文章目录
前言
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。
一、Make简介
Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。
Make将只编译改动的代码文件,而不用完全编译。
二、基本结构
1.Makefile是Make读入的唯一配置文件
1、由make工具创建的目标体(target),通常是目标文件或可执行文件
2、要创建的目标体所依赖的文件(dependency_file)
3、创建每个目标体时需要运行的命令(commend)
注意:命令行前必须是一个“TAB键”,否则编译错误
为: *** missing separator. Stop.
2.Makefile格式
target: dependeney_files
<‘TAB’> command
TAB一定要用按键
代码如下(示例):
hello.o : hello.c hello.h
gcc -c hello.c -o hello.o
3.Makefile变量
target: dependeney_files
<‘TAB’> command
TAB一定要用按键
代码如下(示例):
hello.o : hello.c hello.h
gcc -c hello.c -o hello.o
三、Makefile实例
创建f1.c文件
#include <stdio.h>
void print1()
{
printf("i'm f1.c\n");
}
创建f2.c文件
#include <stdio.h>
void print2()
{
printf("i'm f2.c\n");
}
创建head.h文件
void print1();
void print2();
创建main.c文件
#include "head.h"
int main()
{
print1();
print2();
return 0;
}
创建Makefile文件
test:f1.o f2.o main.o
gcc f1.o f2.o main.o -o test
f1.o:f1.c
gcc -c f1.c -o f1.o
f2.o:f2.c
gcc -c f2.c -o f2.o
main.o:main.c
gcc -c main.c -o main.o
结果:
扩展
如果存在clean这个文件
我们需要加入伪目标
总结
make是一个命令工具,它解释Makefile 中的指令。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。以上是今天所学,下午再更深入的了解make吧,再见。