makefile 格式

《鬼灭之刃》 - 炭治郎

makefile 格式

方式一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 是注释
# 第一层:显示规则

### 目标文件:依赖文件
### 【Tab】 指令


# 第一个目标文件是最终目标
hello.exe: hello.o other.o
gcc hello.o other.o -o hello.exe

hello.o: hello.c
gcc -c hello.c -o hello.o
other.o: other.c
gcc -c other.c -o other.o


# 伪目标:.PHONY:
.PHONY:
clean:
rm -rf hello.o other.o hello.exe

方式二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 第二层
# 变量 =(替换) +=(追加) :=(恒等于)

TAR = hello.exe
OBJ = hello.o other.o
CC := gcc
RMRF := rm -rf

$(TAR): $(OBJ)
CC $(OBJ) -o $(TAR)
hello.o: hello.c
CC -c hello.c -o hello.o
other.o: other.c
CC -c other.c -o other.o

.PHONY:
clean:
$(RMRF) $(OBJ) $(TAR)

方式三

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 第三层 隐含规则 
# %.c %.o *.c *.o
# %(任意的)
# *(所有的)

TAR = hello.exe
OBJ = hello.o other.o
CC := gcc

$(TAR): $(OBJ)
$(CC) $(OBJ) -o $(TAR)

%.o: %.c
$(CC) -c %.c -o %.o

.PHONY:
clean:
rm -rf $(OBJ) $(TAR)

方式四

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 第四层 通配符
# $^ 所有的依赖文件
# $@ 所有的目标文件
# $< 所有依赖文件的第一个文件

TAR = hello.exe
OBJ = hello.o other.o
CC := gcc

$(TAR): $(OBJ)
$(CC) $^ -o $@

%.o: %.c
$(CC) -c $^ -o $@

.PHONY:
clean:
rm -rf $(OBJ) $(TAR)

多可执行文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 多可执行文件
# all hello.exe hello_1.exe

TAR1 = hello.exe
TAR2 = hello_1.exe

OBJ1 = hello.o other.o
OBJ2 = hello_1.o other_1.o

CC := gcc

# 关键是 all : %.exe %.exe
all: hello.exe hello_1.exe

$(TAR1): $(OBJ1)
$(CC) $^ -o $@

$(TAR2): $(OBJ2)
$(CC) $^ -o $@

%.o: %.c
$(CC) -c $^ -o $@

.PHONY:
clean:
rm -rf $(OBJ1) $(OBJ2) $(TAR1) $(TAR2)


----------- 本文结束 -----------




0%