Request
自动生成
target
文件夹存放可执行文件。自动生成
obj
文件夹存放编译生成的目标文件.o
支持调试版本的编译选项
考虑代码的扩展性
$(wildcard _pattern)
满足_pattern的文件或目录列表
$(addprefix _prefix,names)
给名字列表names中的每一个名字曾家前缀_prefix.
Skill
- 自动获取当前目录下的源文件列表(函数调用)
SRCS := $(wildcard *.c) |
- 根据源文件列表生成目标文件列表(变量的值替换)
OBJS := $(SRCS:.c =.o) |
- 对每一个目标文件列表加上路径前缀(函数调用)
OBJS := ( addprefix path/ , $(OBJS) ) |
规则中的模式替换
%.o : %.c |
针对于当前工作目录
OBJS := func.o main.o |
针对于变量(OBJS)列表
编译规则中的依赖
(创建文件夹) |
Summary
- 目录可以成为目标的依赖,在规则中创建目录。
- 预定义函数是makefile实战中时不可或缺的部分。
- 规则中的模式匹配可以直接针对目录中的文件。
- 可以使用命令行变量便须特殊的目标版本。
工程实例
在工程文件夹下新建立了main.c
func.c
func.h
.(放在同一文件夹下)。
现在已经是第二天。如果.H
文件放在inc
文件夹下面会更合适。也会更加符合实际的工程应用。
main.c
|
func.c
const char* String = "My Densitiy" |
func.h
|
makefile
CC := gcc |