Makefile使用

标准写法

  • 编译hello.c
hello:hello.c
gcc hello.c -o hello # 注意开头的tab, 而不是空格

.PHONY: clean
# 用于指示"clean是一个伪目标", 伪目标相应的命令序列总是会被执行.

clean:
rm hello # 注意开头的tab, 而不是空格

生成目标文件名:依赖文件列表
用于生成目标文件的命令序列 # 注意开头的tab, 而不是空格
  • 更有效率的写法
CC=gcc
CFLAGS=-I.

hellomake: hellomake.o hellofunc.o
$(CC) -o hellomake hellomake.o hellofunc.o
  • 全部编译
SOURCE = $(wildcard *.c)  
TARGETS = $(patsubst %.c, %, $(SOURCE))

CC = gcc
CFLAGS = -Wall -g

all: $(TARGETS)

%: %.c
$(CC) $< $(CFLAGS) -o $@

.PHONY:clean all

clean:
rm -f $(TARGETS)

Makefile文件的格式

[廖雪峰](http://ruanyifeng.com/blog/2015/02/make.html)

Makefile文件由一系列规则(rules)构成。每条规则的形式如下。

<target>: <prerequisites> 
[tab] <commands>

上面第一行冒号前面的部分,叫做"目标"(target),冒号后面的部分叫做"前置条件"(prerequisites);第二行必须由一个tab键起首,后面跟着"命令"(commands)。

  • 键入make -nB, 它会让make程序以"只输出命令但不执行"的方式强制构建目标。

文件名匹配

%.o: %.c # 所有.o/.c结尾的文件

变量

txt = Hello World
test:
@echo $(txt) # 变量放在$()中,@表示不打印直接执行