Makefile入门
- Makfile 基本规则
TARGET...:DEPENDENCIES...
COMMAND
...
目标(TARGET):程序产生的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如clean,也称为伪目标。
依赖(DEPENDENCIES):是用来产生目标的输入文件列表,一个目标通常依赖于多个文件。
命令(COMMAND):是make执行的动作(命令是shell命令或是可在shell下执行的程序)。
注意:每个命令行的起始字符必须位TAB字符!
如果DEPENDENCIES中有一个或多个文件更新的话,COMMAND就要执行,这是Makfile最核心的内容
- 例:
.PHONY:clean
main:main.o add.o sub.o
gcc -Wall -g main.o add.o sub.o -o main
main.o:main.c
gcc -Wall -g -c main.c -o main.o
add.o:add.c add.h
gcc -Wall -g -c add.c -o add.o
sub.o:sub.c sub.h
gcc -Wall -g -c sub.c -o sub.o
clean:
rm -f main main.o add.o sub.o
- Makefile自动化变量
选项名 作用
$@ 规则的目标文件名
$< 规则的第一个依赖文件名
$^ 规则的所有依赖文件列表
- 例:
.PHONY:clean
OBJECTS=main.o add.o sub.o
main:$(OBJECTS)
gcc -Wall -g $^ -o $@
main.o:main.c
gcc -Wall -g -c $< -o $@
add.o:add.c add.h
gcc -Wall -g -c $< -o $@
sub.o:sub.c sub.h
gcc -Wall -g -c $< -o $@
clean:
@echo "clean"
rm -f main $(OBJECTS)@符号 表示 只是执行这个命令,不打印出来
- 例:
make clean -f Makefile.1
指定Makefile.1 的目标clean 来执行make
- Makefile编译多个可执行文件
模式规则
%.o:%.c
后缀规则
.c.o
自动推导:
.PHONY:clean all
BIN=01test 02test
all:$(BIN)
clean:
rm -f *.o $(BIN)
.PHONY:clean all
BIN=01test 02test
all:$(BIN)
#%.o:%.c
# gcc -Wall -g -c $< -o $@
.c.o:
gcc -Wall -g -c $^ -o $@
01test:01test.o
gcc -Wall -g $^ -o $@
01test:02test.o
gcc -Wall -g $^ -o $@
clean:
rm -f *.o $(BIN)
设置别名:
.PHONY:clean all
CC=gcc
CFLAGS=-Wall -g
BIN=01test 02test
all:$(BIN)
#%.o:%.c
# $(CC) $(CFLAGS) -c $< -o $@
.c.o:
$(CC) $(CFLAGS) -c $^ -o $@
01test:01test.o
$(CC) $(CFLAGS) $^ -o $@
01test:02test.o
$(CC) $(CFLAGS) $^ -o $@
clean:
rm -f *.o $(BIN)

浙公网安备 33010602011771号