makefile多目录和头文件编译
时间: 2023-11-08 14:06:04 浏览: 225
makefile 学习笔记
对于多目录和头文件的编译,可以使用Makefile来管理和编译代码。
以下是一个例子:
```
# Makefile
# 设置编译器和编译选项
CC = g++
CFLAGS = -Wall -g
# 设置源文件目录和头文件目录
SRCDIR = src
INCDIR = include
# 设置目标文件目录和可执行文件目录
OBJDIR = obj
BINDIR = bin
# 设置目标文件和可执行文件名称
TARGET = program
OBJS = $(OBJDIR)/main.o $(OBJDIR)/func.o
# 编译规则
all: $(BINDIR)/$(TARGET)
$(BINDIR)/$(TARGET): $(OBJS)
$(CC) $(CFLAGS) $(OBJS) -o $@
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
$(CC) $(CFLAGS) -c $< -o $@ -I $(INCDIR)
# 清理规则
clean:
rm -rf $(OBJDIR)/*.o $(BINDIR)/$(TARGET)
```
在这个例子中,我们假设有以下目录结构:
```
project/
├── Makefile
├── include/
│ └── func.h
└── src/
├── main.cpp
└── func.cpp
```
其中,`include/`存放头文件,`src/`存放源文件。使用Makefile编译时,会将编译生成的目标文件放在`obj/`目录中,将可执行文件放在`bin/`目录中。
Makefile中,`SRCDIR`和`INCDIR`分别指向源文件目录和头文件目录。在编译规则中,使用`-I`选项指定头文件目录。`OBJS`中的目标文件路径是相对于`OBJDIR`的。
在编译时,Makefile会按照`SRCDIR`和`INCDIR`中指定的路径查找源文件和头文件。生成的目标文件和可执行文件会放在`OBJDIR`和`BINDIR`中指定的目录中。
使用命令`make`即可编译生成可执行文件。使用命令`make clean`可以清除生成的目标文件和可执行文件。
阅读全文