Makefile 基础知识


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


 








你可能感兴趣的:(linux,/c)