Makefile 基础知识

来源:互联网 发布:风云2麒麟臂升阶数据 编辑:程序博客网 时间:2024/06/05 06:51


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 testadd.o:add.c math.h          gcc -c add.c math.h/*命令行前用tab键缩格*/sub.o:sub.c math.h           gcc  -c sub.c math.htest.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中执行的时候其会自动原模原样地展开在所使用的地方。

#makefileOBJ_FILE=test.o add.o    /*声明时需要赋初值*/test: $(OBJ_FILE)       /*使用时需要在变量名前加$*/         gcc $(OBJ_FILE)  -o test

$@,表示规则中的目标。不需要赋值

$<,表示规则中的第一个条件。不需要赋值

$?,表示规则中所有比目标新的条件,组成一个列表,以空格分隔。

$^,表示规则中的所有条件,组成一个列表,以空格分隔。

再次对我们的Makefile加以修改,内容如图所示:

#makefileOBJ _FILE=test.o add.o sub.o test:$(OBJ_FILE)#       gcc $(OBJ_FILE)  -o test          gcc $^ -o $@clean:....

4.5函数的使用

实例

#makefileSRC_FILE=$(wildcard *.c)    /*找出当前路径下所有以.c 结尾的文件*/test:$(SRC_FILE)         gcc $^ -o $@clean:....

4.6makefile命令选项

make -n 打印要执行的命令,不真正执行。

make -c 切换目录执行makefile