Makefile语法命令

自动化变量

$@  表示目标文件,即规则中的所有目标文件
$^  所有的依赖文件
$<  第一个依赖文件
$?  所有比目标新的依赖目标文件,以空格分割

关键字

wildcard  扩展通配符
notdir  去除路径
patsubst  替换通配符

简单示例

1. 生成可执行文件

CC = gcc
CFLAGS = -g -Wall -I/home/gpdba/greenplum/include/postgresql/server
LDFLAGS = -lm
SRC_DTB = comb.c #分布数据
OBJ_FFT = $(patsubst %c, %o, $(SRC_FFT))
BIN_DTB = fft

all:$(BIN_DTB) 

.PHONY: all clean

$(BIN_DTB) : $(SRC_DTB)
	$(CC) $^ -o $@ -std=c99

clean :
	rm -f *.o *.so $(BIN_DTB)

CC = gcc
编译器
CFLAGS = -g -Wall -I/home/gpdba/greenplum/include/postgresql/server
设置编译参数
LDFLAGS = -lm
设置共享库
SRC_DTB = comb.c
源文件
OBJ_FFT = $(patsubst %c, %o, $(SRC_FFT))
目标文件(设置与源文件同名)
BIN_DTB = fft
生成的可执行文件
all:$(BIN_DTB)
控制生成的文件
$(BIN_DTB) : $(SRC_DTB)
    $(CC) $^ -o $@ -std=c99

编译生成目标文件
clean :
    rm -f *.o *.so $(BIN_DTB)

使用 make clean 删除中间文件

2. 生成动态共享库文件

CC = gcc
CFLAGS = -g -Wall -I/home/gpdba/greenplum/include/postgresql/server
LDFLAGS = -lm -lhiredis
SRC_FFT = fft.c
OBJ_FFT = $(patsubst %c, %o, $(SRC_FFT))
LIB_FFT = fft.so

all:$(LIB_FFT)

.PHONY: all clean

$(OBJ_FFT) : $(SRC_FFT)
	$(CC) $(CFLAGS) -fpic -c $^ -o $@

$(LIB_FFT) : $(OBJ_FFT)
	$(CC) $(LDFLAGS) -shared -o $@ $^

clean :
	rm -f *.o *.so $(BIN_DTB)

$(OBJ_FFT) : $(SRC_FFT)
    $(CC) $(CFLAGS) -fpic -c $^ -o $@

生成目标文件
$(LIB_FFT) : $(OBJ_FFT)
    $(CC) $(LDFLAGS) -shared -o $@ $^

生成共享库文件

Make 命令教程 
跟我一起写 Makefile 

跟我一起写Makefile(evpx)