Makefile

文件编写好以后在Linux命令行中执行一条make命令即可自动编译整个工程。

1、Makefile的参数

1.目标:即要生成的文件。

2.依赖:即目标文件由哪些文件生成。

3.命令:即通过执行命令由依赖文件生成目标文件。

4.all:Makefile文件默认只生成第一个目标文件即完成编译,但是可以通过all 指定所需要生成的目标文件。

Makefile中,目标(Target)和依赖(Dependency)是通过规则(Rule)来表达的。

前面必须要有一个“Tab”

2、Makefile的假目标

假目标采用.PHONY关键字来定义

.PHONY:clear
clear:
    rm obj/*.o
    rm bin/*

运行则是make clear,作用是删除obj目录下的.o文件(目标文件,Object File)和bin目录下的可执行文件,方便更新。

3、Makefile变量

3-1、自动变量

 $@用来表示一个规则中的目标。当一个规则中有多个目标时。

 $@所指的是其中任何造成命令被执行的目标。

 $^则表示对是规则中所有的选择条件(依赖文件)

 $<表示对是规则中的第一个先决条件(依赖文件)

3-2、预定义变量

CC                C编译器的名称,默认为cc

CPP              C预编译器的名称,默认为$(CC)-E

RM                文件删除程序的名称,默认值为rm -f

4、一个程序的文件夹分层

bin:存放可执行文件

obj:存放.o文件(目标文件)

src:存放.c文件(源码)

include:存放.h文件(头文件)

Makefile

5、一个完整的项目的Makefile编写

Makefile:外层的大Makefile

ALL:
	make -C src/
	make -C obj/ 

.PHONY:clear
clear:
	rm obj/*.o
	rm bin/*

scr/Makefile: 由源代码生成目标文件 ,由gcc -c $< -o $@ 

ALL:../obj/iclient.o ../obj/log_reg_menu.o ../obj/c_regist_login.o ../obj/sys_menu.o ../obj/function.o
../obj/iclient.o:iclient.c
	gcc -c $< -o $@
../obj/log_reg_menu.o:log_reg_menu.c
	gcc -c $< -o $@
../obj/c_regist_login.o:c_regist_login.c
	gcc -c $< -o $@
../obj/sys_menu.o:sys_menu.c
	gcc -c $< -o $@
../obj/function.o:function.c
	gcc -c $< -o $@

obj/Makefile:链接所有目标文件生成bin目录下的可执行文件

ALL:
	gcc *.o -o ../bin/app 

你可能感兴趣的:(linux,运维,服务器)