Tangaoo an embedded software engineer

GNU/Make 模板

2021-06-05
tangoo

一个覆盖80%需求的Makefile模板。

1. 先上模板

# (1)编译器配置
CC=gcc
CFLAGS=-Wall
LDFLAGS=-lpthread
INSTALL=/usr/bin/install -c

# (2)路径配置
prefix=/usr/local
includedir=$(prefix)/include
libdir=$(prefix)/lib

# (3) wildcard *.h == ls *.h
#     (c_files:.c=.o) 把.c替换成.o
header_files=$(wildcard *.h)
c_files=$(wildcard *.c)
objects=$(c_files:.c=.o)

all:$(objects)
	$(CC) $(LDFLAGS) $^ -o demo

# (4) %.o %.c 模式规则
#     $^ == %.c 表示依赖的第一个参数
#     $@ == %.o 表示目标
%.o:%.c
	$(CC) $(CFLAGS) -c $^ -o $@

# (5) 表示伪目标
.PHONY: install uninstall clean

install:
	mkdir -p $(prefix)/makefile_demo
	cp demo  $(prefix)/makefile_demo

uninstall:
	rm -rf $(prefix)/makefile_demo

clean:
	rm -f $(objects) demo

2. 上面 Makefile 实现了哪些功能

  • 通配单目录源文件 C 程序工程,只需改 target 名字。
  • 新增、删减文件无需改Makefile。

3. 理论

3.1 结构规则

目标: [依赖列表]
<Tab 缩进>[命令]

  • 结构规则中的依赖列表 命令可选。

3.2 依赖关系

  • Makefile 是一个树,all 是这个树的根节点,all 有依赖,依赖又会是目标,又会有依赖。如同一棵树从树根到树干再到树枝最后到树叶,发散依赖。

  • 详细参考,为小项目写 Makefile


上一篇 RT-Tests

Comments

Content