bin include func main view makefile objs 主目录makefile:通过指令—C读取下面目录中
makefile
./bin: 执行文件夹 执行文件名test
test
./include: 头文件文件夹(包含系统头文件与自定义头文件)
func.h
./func: 子函数功能
func.c makefile
./view: 界面函数
view.c makefile
./main: 主函数
main.c makefile
./objs: 存放生成执行文件的依赖的点o文件 test:func.o main.o view.o
func.o main.o view.o makefile
简单的理解就是主目录中的makefile 读取次目录下面的makefile(可以理解为函数的调用)
OBJS=func.o main.o view.o 首先先定义编译过程生成执行文件的依赖的变量
OBJS_DIR=objs 定义存放的点o文件夹
BIN_DIR=bin 定义存放的执行文件夹
BIN=test 定义执行文件的名称
CFLAGS=-I ../include -c -g -Wall 定义gcc编译的命令选项并且指定头文件的读取目录
此处注意一定是上级目录中的include,因为编译是
在次目录编译的(在包含点c文件的文件夹下编译的)
DIRS=func main view objs 定义所有包含makefile文件的文件夹
-C读取是按照顺序来的,所有objs目录放在最后面
objs里面的点o文件是最后执行并且生成执行文件的
export OBJS OBJS_DIR BIN BIN_DIR CFLAGS DIRS 定义为全局变量(共享变量,如果不指定变量则默认共
享全部变量)
all:CHECK_DIR $(DIRS) 神奇的all目标(执行make 与make all效果一样)
CHECK_DIR:
mkdir -p $(BIN_DIR) 创建执行文件夹bin
$(DIRS):ECHO
make -C $@ 依次读取DIRS中得makefile文件
ECHO:
@echo $(DIRS)
.PHONY:clean 删除文件并且忽略伪文件
clean:
@rm -rf $(OBJS_DIR)/*.o 删除objs下面的所有点o文件
@rm -rf $(BIN_DIR) 删除创建的bin执行目录(包括里面的执行文件)