makefile编译时如何创建多目录文件依赖编译
时间: 2024-09-23 09:11:22 浏览: 50
Makefile 是一种自动化构建工具,用于管理源代码文件与目标文件之间的依赖关系。如果你需要在多个目录下处理文件,并确保它们之间的依赖也被正确处理,你可以采用以下策略:
1. **设置变量**:
首先,为每个目录设置一个变量,表示其相对根目录的位置。例如,假设你有两个目录 "src" 和 "lib",可以用下面的方式:
```
SRCDIR := src
LIBDIR := lib
```
2. **指定规则**:
对于每个目录内的文件,定义一个规则来描述它的依赖。例如,假设 `src` 目录有一个名为 `main.c` 的源文件,它依赖于 `lib` 目录里的 `mathfunc.c`:
```
$(SRCDIR)/main.o: $(LIBDIR)/mathfunc.o
gcc $(SRCDIR)/main.c -c -o $@
```
这里 `$(SRCDIR)` 是为了保证路径的动态替换。
3. **递归规则**:
如果你在 `lib` 目录中有更复杂的目录结构,可以使用通配符 `*` 或 `?` 来匹配文件名,并用递归规则来处理。比如:
```
$(LIBDIR)/%.o: $(LIBDIR)/%.cpp
g++ -c $< -o $@
```
这将对 `lib` 目录下所有的 `.cpp` 文件生成对应的 `.o` 文件。
4. **主 Makefile 文件**:
在主 Makefile 文件中,将所有目录的依赖规则都加入进来,然后定义一个总的 target,比如 `all`,去构建最终的目标,如 `bin/app`:
```
all: bin/app
bin/app: $(SRCDIR)/main.o $(LIBDIR)/dependency.o
gcc $^ -o $@
clean:
rm -f *.o bin/app
```
5. **更新规则**:
使用 `VPATH` 变量来指明 Make 查找头文件和其他源文件所在的目录,这样即使文件分布在多个目录中,也能正确找到它们:
```
VPATH = $(SRCDIR) $(LIBDIR)
```
记得每次更改源代码后,使用 `make` 命令重新编译,Makefile 会自动检测并仅编译发生变化的文件。
阅读全文