下面我们通过几个例子深入一点点,学习一下Makefile
例:1
prwk:main.o mytool1.o mytool2.o
gcc -o prwk main.o mytool1.o mytool2.o
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c
上边个例子是一个最基本的Makefile例子,按照顺序执行,一行一行很清楚,第一行是规则行,第二行是动作行。
例:2
all:prwk clean
prwk:main.o mytool1.o mytool2.o
gcc -o prwk main.o mytool1.o mytool2.o
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c
clean :
rm *.o
稍微加了个参数,当执行 make - clean 命令的时候就会删除当前目录的所有 .o的文件
例:3
OBJECT=main.o mytool1.o mytool2.o
all:prwk clean
prwk:main.o mytool1.o mytool2.o
gcc -o prwk $(OBJECT)
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c
clean :
rm $(OBJECT)
例3则定义了一个变量,注意变量名一定要大写,用变量代替了长长地字符
例:4
#
OBJECT=main.o mytool1.o mytool2.o
all:prwk clean
prwk:main.o mytool1.o mytool2.o
gcc -I /home/user00/include -o prwk $(OBJECT)
main.o:main.c
gcc -I /home/user00/include -c main.c
mytool1.o:mytool1.c
gcc -I /home/user00/include -c mytool1.c
mytool2.o:mytool2.c
gcc -I /home/user00/include -c mytool2.c
clean :
rm $(OBJECT)
注意变化,呵呵,在编译的时候设置include的路径
例:5
#
OBJECT=main.o mytool1.o mytool2.o
INCLUDE=-I /home/user00/include
all:prwk clean
prwk:main.o mytool1.o mytool2.o
gcc $(INCLUDE) -o prwk $(OBJECT)
main.o:main.c
gcc $(INCLUDE) -c main.c
mytool1.o:mytool1.c
gcc $(INCLUDE) -c mytool1.c
mytool2.o:mytool2.c
gcc $(INCLUDE) -c mytool2.c
clean :
rm $(OBJECT)
再设置一个变量,省去长长的字符串
例:6
GCC=gcc
OBJECT=main.o mytool1.o mytool2.o
INCLUDE=-I /home/user00/include
all:prwk clean
prwk:main.o mytool1.o mytool2.o
$(GCC) $(INCLUDE) -o prwk $(OBJECT)
main.o:main.c
$(GCC) $(INCLUDE) -c main.c
mytool1.o:mytool1.c
$(GCC) $(INCLUDE) -c mytool1.c
mytool2.o:mytool2.c
$(GCC) $(INCLUDE) -c mytool2.c
clean :
rm $(OBJECT)
就是一个个字符串的替换,替来替去,呵呵,由间入难,满满来~~~