为了编写一个Makefile文件来自动化编译一个项目,我们需要知道项目中包含哪些源文件以及它们是如何组织的。假设我们有一个简单的项目,它包含两个C源文件`main.c`和`helper.c`,以及一个头文件`helper.h`。我们希望编译这些文件生成一个名为`project`的可执行文件。
以下是一个简单的Makefile示例,它定义了如何编译这个项目:
```makefile
# 定义编译器和编译选项
CC=gcc
CFLAGS=-Wall -Wextra -g
# 定义目标可执行文件名
TARGET=project
# 定义源文件列表
SOURCES=main.c helper.c
# 定义目标文件列表
OBJECTS=$(SOURCES:.c=.o)
# 默认目标
all: $(TARGET)
# 编译目标
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -o $(TARGET) $(LDFLAGS)
# 编译每个源文件为对象文件
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理编译生成的文件
clean:
rm -f $(OBJECTS) $(TARGET)
# 重新构建项目
rebuild: clean all
# 打印帮助信息
help:
@echo "Available targets:"
@echo " all - Build the project"
@echo " clean - Remove all generated files"
@echo " rebuild - Clean and rebuild the project"
@echo " help - Print this help message"
在这个Makefile中,我们定义了以下内容:
CC
变量定义了使用的编译器,这里默认为gcc
。CFLAGS
变量定义了编译选项,例如-Wall
和-Wextra
用于启用额外的警告,-g
用于生成调试信息。TARGET
变量定义了最终生成的可执行文件名。SOURCES
变量列出了所有源文件。OBJECTS
变量通过模式替换从源文件列表生成对象文件列表。all
目标是默认目标,它依赖于$(TARGET)
,即项目可执行文件。$(TARGET): $(OBJECTS)
规则定义了如何将对象文件链接成最终的可执行文件。%.o: %.c
规则定义了如何将每个.c
文件编译成.o
文件。clean
目标用于删除所有编译生成的文件。rebuild
目标首先执行clean
,然后重新构建项目。help
目标用于打印帮助信息。
要使用这个Makefile,只需将其保存为 Makefile
文件,并在包含该文件的目录中打开终端,然后输入 make
命令来编译项目。如果需要帮助,可以输入 make help
。
标签:文件,定义,Makefile,源文件,编译,编写,TARGET
From: https://www.cnblogs.com/ZGLi/p/18248471