Makefile基本格式如下:
target ... : prerequisites ...
command
...
...
其中,
target - 目标文件, 可以是 Object File, 也可以是可执行文件
prerequisites - 生成 target 所需要的文件或者目标
command - make需要执行的命令 (任意的shell命令), Makefile中的命令必须以 [tab] 开头
注意: Makefile只有行注释 "#"
eg:
1、最简单的makefile
a.out : main.c
gcc main.c -o a.out
2、如果有多个文件分模块编译:
jsq:main.o add.o sub.o
gcc main.o add.o sub.o -o jsq
main.o:main.c
gcc -c main.c -o main.o
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
3、加入一些伪目标支持:
.PHONY: clean install
jsq:main.o add.o sub.o
gcc main.o add.o sub.o -o jsq
main.o:main.c
gcc -c main.c -o main.o
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
clean:
rm -rf *.o
install:
cp ./jsq /usr/local/sbin
4、加入一些变量缩短脚本
.PHONY: clean install
OBJS=main.o add.o sub.o div.o
FLAGS=-Wall -g -c
CC=gcc
jsq:$(OBJS)
gcc $(OBJS) -o jsq
main.o:main.c
$(CC) $(FLAGS) main.c -o main.o
add.o:add.c
$(CC) $(FLAGS) add.c -o add.o
sub.o:sub.c
$(CC) $(FLAGS) sub.c -o sub.o
div.o:div.c
$(CC) $(FLAGS) div.c -o div.o
clean:
rm -rf $(OBJS)
rm -rf jsq
install:
cp ./jsq /usr/local/sbin
5、来个终极优化版
.PHONY: clean install
OBJS=main.o add.o sub.o div.o
FLAGS=-Wall -g -c
CC=gcc
jsq:$(OBJS)
$(CC) $^ -o $@
%.o:%.c
$(CC) $(FLAGS) $< -o $@
clean:
rm -rf $(OBJS)
rm -rf jsq
install:
cp ./jsq /usr/local/sbin
linux学习之makefile的使用
最新推荐文章于 2022-01-06 16:37:01 发布