1.目的:实现自动化编译
2.过程:make命令执行=====》需要一个 Makefile 文件=======》makefile的书写规则
3.实现:编写makefile 文件====》执行make命令======》生成可执行文件
4.makefile详细规则:
4.1基本规则:
target(目标文件): prerequisites(依赖的文件)
command(shell 命令)
实现如下:
#makefile /*文件名*/
test:test.o add.o sub.o
gcc test.o add.o sub.o -o test
add.o:add.c math.h
gcc -c add.c math.h/*命令行前用tab键缩格*/
sub.o:sub.c math.h
gcc -c sub.c math.h
test.o:test.c math.h
gcc -c test.c math.h
4.2 文件中clean目标,用于清除编译过程中产生的中间文件,保留源代码。现在将目标clean加入到我们的Makefile中。
实现如下:
clean:
@echo "clean project...." /*@符号屏蔽命令的显示,只将命令的执行结果显示到屏幕*/
-rm *.o /*清除所有的.o文件,-符号命令执行成功与否,都继续执行下边的命令*/
@echo "clean complete..."
.PHONY:clean /*伪目标,解决clean 文件存在的情况下不能再次执行clean的问题*/
clean是一个约定俗称的目标,像这样的约定还有。
all:通常为缺省的目标,执行缺省的编译工作。
install:编译后的安装工作,将相应的文件拷贝到合适的位置。
distclean:清除所有编译中生成的文件,只保留源文件。
4.3 make的隐含规
make的隐含规则数据库可以用make-p命令打印
4.4 变量
在Makefile中的定义的变量,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使用的地方。
#makefile
OBJ_FILE=test.o add.o /*声明时需要赋初值*/
test: $(OBJ_FILE) /*使用时需要在变量名前加$*/
gcc $(OBJ_FILE) -o test
$@,表示规则中的目标。不需要赋值
$<,表示规则中的第一个条件。不需要赋值
$?,表示规则中所有比目标新的条件,组成一个列表,以空格分隔。
$^,表示规则中的所有条件,组成一个列表,以空格分隔。
再次对我们的Makefile加以修改,内容如图所示:
#makefile
OBJ _FILE=test.o add.o sub.o
test:$(OBJ_FILE)
# gcc $(OBJ_FILE) -o test
gcc $^ -o $@
clean:....
4.5函数的使用
实例
#makefile
SRC_FILE=$(wildcard *.c) /*找出当前路径下所有以.c 结尾的文件*/
test:$(SRC_FILE)
gcc $^ -o $@
clean:....
4.6makefile命令选项
make -n 打印要执行的命令,不真正执行。
make -c 切换目录执行makefile