CompileTest
--------Base
----------------base.c
----------------base.h
--------Print
----------------print1.c
----------------print2.c
----------------print3.c
----------------print.h
--------App
----------------main.c
Makefile文件:
CC = gcc
INC = -I./Print -I./Base
OBJ = obj
target: $(OBJ) $(OBJ)/main.o $(OBJ)/print1.o $(OBJ)/print2.o $(OBJ)/print3.o $(OBJ)/base.o
cd $(OBJ) && $(CC) main.o print1.o print2.o print3.o base.o -o target.out
all: target
$(OBJ)/target.out
$(OBJ):
mkdir obj
$(OBJ)/main.o: App/main.c
$(CC) -c App/main.c -o $(OBJ)/main.o $(INC)
$(OBJ)/print1.o: Print/print1.c
$(CC) -c Print/print1.c -o $(OBJ)/print1.o $(INC)
$(OBJ)/print2.o: Print/print2.c
$(CC) -c Print/print2.c -o $(OBJ)/print2.o $(INC)
$(OBJ)/print3.o: Print/print2.c
$(CC) -c Print/print3.c -o $(OBJ)/print3.o $(INC)
$(OBJ)/base.o: Base/base.c
$(CC) -c Base/base.c -o $(OBJ)/base.o $(INC)
clean: $(OBJ)/target.out
rm $(OBJ)/target.out
介绍:
1.
CC = gcc
这是make的变量定义,后面如果要使用该变量就得这么用。其实说到底这就是C语言当中的define
$(CC)
2.
-I./Print和-IPrint是一样的,只是使用./分开看着舒服些,规范些
这个东西是gcc用来指定头文件目录的,使用方法就是在gcc编译命令行结尾加上-I./Print就行了,记住是IJK的大写I,
而不是LMN的L。小写l是用来指定库文件,大写L是用来指定库头文件目录的。
用法示例:
$(CC) -c App/main.c -o $(OBJ)/main.o $(INC)
3.
target: $(OBJ) $(OBJ)/main.o $(OBJ)/print1.o $(OBJ)/print2.o $(OBJ)/print3.o $(OBJ)/base.o
cd $(OBJ) && $(CC) main.o print1.o print2.o print3.o base.o -o target.out
第一个$(OBJ)等价于obj,是用来判断是否有obj目录,有的话就不管,没有的话就进入下面语句新建目录。
$(OBJ):
mkdir obj