一个适用于层级目录结构的makefile模版
时间: 2023-10-29 13:04:23 浏览: 37
以下是一个适用于层级目录结构的makefile模板:
```makefile
# 定义变量
CC = gcc
CFLAGS = -Wall -g
LIBS = -lm
# 定义源文件和目标文件路径
SRCDIR = src
OBJDIR = obj
BINDIR = bin
SOURCES := $(wildcard $(SRCDIR)/**/*.c $(SRCDIR)/*.c)
OBJECTS := $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SOURCES))
# 定义目标文件
TARGET = $(BINDIR)/myprogram
# 编译规则
$(TARGET): $(OBJECTS)
$(CC) $(CFLAGS) $(LIBS) $^ -o $@
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR):
mkdir -p $(OBJDIR)
# 清理规则
.PHONY: clean
clean:
rm -rf $(OBJDIR) $(BINDIR)
# 运行规则
.PHONY: run
run: $(TARGET)
./$(TARGET)
```
该模板包含以下特点:
- 可以处理多层级目录结构,对应的源文件和目标文件放置在不同的目录中。
- 可以自动识别源文件并生成对应的目标文件。
- 可以自动创建目标文件所在的目录。
- 支持清理和运行操作。
使用时,只需要将上述模板保存为Makefile文件,并在对应的目录下执行make命令即可编译生成目标文件。使用make clean命令可以清理生成的目标文件和对象文件。使用make run命令可以直接运行生成的目标文件。