makefile多目录和头文件编译
时间: 2023-11-08 15:06:04 浏览: 82
在Makefile中实现多目录和头文件编译的关键是要将头文件的路径和源文件的路径分开,以便在编译时能够正确地找到这些文件。
以下是一个简单的Makefile示例,演示了如何实现多目录和头文件编译:
```
CC = gcc
CFLAGS = -Wall -Wextra -Werror
INCLUDES = -I./include
SRCDIR = src
OBJDIR = obj
BINDIR = bin
SOURCES = $(wildcard $(SRCDIR)/*.c)
OBJECTS = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SOURCES))
EXECUTABLE = $(BINDIR)/myprogram
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(CFLAGS) $(INCLUDES) $^ -o $@
$(OBJDIR)/%.o: $(SRCDIR)/%.c
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
clean:
rm -f $(OBJECTS) $(EXECUTABLE)
```
在此Makefile中,`SRCDIR`定义源文件的目录,`OBJDIR`定义对象文件的目录,`BINDIR`定义可执行文件的目录,`INCLUDES`定义头文件的路径。
我们使用`wildcard`函数来获取源文件的所有文件名,并使用`patsubst`函数将它们转换为对象文件的文件名。然后,我们定义了一个名为`all`的目标,它将生成可执行文件。我们使用`$(EXECUTABLE)`作为目标,并将它的依赖项设置为所有的对象文件。在`$(EXECUTABLE)`的规则中,我们链接了所有的对象文件以生成可执行文件。在对象文件的规则中,我们编译了每个源文件并将其转换为一个对象文件。
最后,我们定义了一个名为`clean`的目标,用于清除所有对象文件和可执行文件。
请注意,此Makefile假定源文件和头文件分别在`src`和`include`子目录中。您可以根据实际情况修改这些目录。
阅读全文