Makefile规则格式
目标:依赖文件集合
命令1
命令2
…
举例一
将main.c input.c calu.c编译成目标文件main
#Makefile举例
objects = main.o input.o calu.o
main:$(objects)
gcc –o main $(objects)
%.o:%.c
gcc –c $<
.PHONY:clean
clean:
rm *.o
rm main
①第一行,‘#’用于注释
②第二行,定义了变量objects,并赋值。
③第三行,目标是main,需要依赖变量objects指定的文件。
④第四行,gcc命令执行,将.o文件链接生成目标文件main。当然,也可以写成gcc $(objects) -o $ @”$ @”表示匹配模式中定义的目标文件集合。
⑤第五行,%表示任意长度的非空字符串。目标中的“%”所代表的值决定了依赖中的“%”的值
⑥第六行,“$ <”:依赖文件中的第一个文件,如果依赖文件是以模式(即“%”)定义的,那么”$<”就是依赖文件集合。
⑦第七行,申明clean为伪目标,不管当前目录下是否存在“clean”的文件,执行“make clean”后面的rm都会执行。
⑧第八行,创建clean命令,执行“make clean”,会执行rm相关命令
举例二
创建一个工程目录,”bin”目录下存放生成的”.o”文件,”inc”目录下存放”.h”头文件,”src”目录下存放”*.c”源文件。根目录下编写Makefile文件,生成目标文件”main”
objects=./src/mvss_main.o ./src/mvss_net.o ./src/mvss_usb.o \
./src/mvss_can.o ./src/mvss_log.o
CC=arm-linux-gcc
mvss_main:$(objects)
$(CC) -Wall -lrt -lpthread $(objects) -o $@
mv ./src/*.o ./bin
$(objects): %.o:%.c
$(CC) -c -g -Wall -lpthread $< -o $@
.PHONY:clean
clean:
rm ./bin/*.o -rf
rm mvss_main -rf
注意事项
1.Makefile的首字母一定要大写
2.每条命令必须TAB键开始,不能使用空格!