makefile多目录编译
时间: 2023-09-13 14:05:59 浏览: 97
在Makefile中,可以通过设置变量来指定源代码文件和目标文件的路径,从而实现多目录编译。以下是一个示例Makefile:
```
# 设置源文件和目标文件的路径
SRCDIR = src
OBJDIR = obj
# 源文件列表
SRCS := $(wildcard $(SRCDIR)/*.c)
# 目标文件列表
OBJS := $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SRCS))
# 编译命令
CC = gcc
CFLAGS = -Wall -Wextra -std=c99 -O2
# 默认目标
all: myprogram
# 生成可执行文件
myprogram: $(OBJS)
$(CC) $(CFLAGS) $^ -o $@
# 生成目标文件
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
$(CC) $(CFLAGS) -c $< -o $@
# 创建目标文件夹
$(OBJDIR):
mkdir -p $(OBJDIR)
# 清理命令
clean:
rm -rf $(OBJDIR) myprogram
```
在这个示例Makefile中,`SRCDIR`和`OBJDIR`变量分别指定了源代码文件和目标文件的路径。通过`wildcard`函数和`patsubst`函数,可以自动获取所有的源文件和对应的目标文件列表。在`myprogram`目标中,将所有的目标文件链接成可执行文件。在生成目标文件的规则中,使用`|`符号表示依赖于`$(OBJDIR)`目录的创建,即如果`$(OBJDIR)`目录不存在,则会先创建该目录。同时,也可以通过添加`$(OBJDIR)`依赖来保证目标文件夹一定存在。最后,在`clean`目标中,可以清理生成的目标文件和可执行文件。
阅读全文