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)








                
posted @ 2018-05-27 18:17  my_flash  阅读(47)  评论(0)    收藏  举报