一、Makefile的原理和作用
避免输入冗余的命令行
避免漏掉需要编译的文件
避免编译无需编译的文件
避免手动清洁目录
根据程序之间的依赖关系,决定是否编译及编译顺序。
根据源文件和目标文件的修改时间,决定是否编译。
根据定义的编译规则,生成目标文件 / 执行程序。
Makefile 文件:
� 描述程序文件之间的依赖关系和编译方法。
Make 命令:
� 用于根据 Makefile 文件进行编译并产生结果。
自动编译项目所需文件
自动跳过不必要编译
自动进行程序部署
自动清理目录
二、makefile语法
组成部分 说明
宏定义 定义 Makefile 文件中使用的变量
依赖关系 描述文件之间的依赖关系
编译指令 定义从各源文件生成对应目标文件的命令
一个简单的例子:
CC=g++
CPPFLAGS=-c -g
LFLAGS=-g
test : test.o
$(CC) $(LFLAGS) -o test test.o
test.o : test.cpp
$(CC) $(CPPFLAGS) test.cpp
test.cpp
#include <stdio>
main() main() main() main()
{
printf("Hello! ");
return 0;
}
(test.cpp->test.o->test)
执行 makefile
� $ make
根据当前目录下的 makefile/Makefile 生成第一个目标
� $ make -f mymakfile
执行指定的 makefile 文件
� $ make test
生成指定的目标: test
� $ make test.o
生成指定的目标: test.o
依赖关系的语法
� 依赖关系定义
� 语法:
目标:依赖文件
命令
� 用途:描述文件的依赖关系和结果生成方法
� 说明:
� < 目标 > 通常是一个目标文件,但也可以是多个(用
分隔)
� < 依赖文件 > 是一个或多个被依赖的源(用空格分隔
� < 命令 > 为生成目标的命令(行首必须为 TAB 符)
目标
例子,见图1
test: test.o pub.o
g++ -o test test.o pub.o
test.o: test.cpp pub.h
g++ -c test.cpp
pub.o: pub.cpp pub.h
g++ -c pub.cpp