最简单的makefile
app: main.c func.c
gcc main.c func.c -o app
生成.o
使用这种方法的好处是,当修改其中一个时,只需要重新编译其中的一个
app: main.o func.o
gcc main.o func.o -o app
main.o: main.c
gcc -c main.c -o main.o
func.o: func.c
gcc -c func.c -o func.o
伪目标.PHONY
只是一个标签,不执行,用来申明,最常用的是clean
.PHONY: clean all
all: app app2
# echo "666"
@echo "666"
app: main.o func.o
gcc main.o func.o -o app
app2: main.o func.o
gcc main.o func.o -o app2
main.o: main.c
gcc -c main.c -o main.o
func.o: func.c
gcc -c func.c -o func.o
clean:
rm -f *.o app app2
自动变量$@
所有目标文件
.PHONY: clean all
all: app app2
# echo "666"
@echo "666"
app app2: main.o func.o
gcc main.o func.o -o $@
main.o: main.c
gcc -c main.c -o main.o
func.o: func.c
gcc -c func.c -o func.o
clean:
rm -f *.o app app2
设置变量
.PHONY: clean all
CFLAGS = -Wall -g -O2
targets=app app2
sources=main.c func.c
objects=main.o func.o
all: $(targets)
# echo "666"
@echo "666"
$(targets): $(objects)
gcc $(CFLAGS) $(objects) -o $@
main.o: main.c
gcc $(CFLAGS) -c main.c -o main.o
func.o: func.c
gcc $(CFLAGS) -c func.c -o func.o
clean:
rm -f *.o $(targets)
自动变量$< 和 $^ 搭配通配符%
.PHONY: clean all
CFLAGS = -Wall -g -O2
targets=app app2
sources=main.c func.c
objects=main.o func.o
all: $(targets)
# echo "666"
@echo "666"
$(targets): $(objects)
gcc $(CFLAGS) $(objects) -o $@
%.o: %.c
gcc $(CFLAGS) -c $< -o $@
clean:
rm -f *.o $(targets)
指定makefile
make -f makefile2.mk
调试makefile
make -f makefile2.mk -n
makefile -C指定目录
一般放在根目录