Makefile基础

  • Post author:
  • Post category:其他




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键开始,不能使用空格!



版权声明:本文为fengweibo112原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。