在Ubuntu系统中,使用GCC编译C或C++程序时,编写Makefile文件可以帮助自动化编译过程。以下是一个简单的Makefile文件示例,以及如何使用它来编译一个C程序。
假设你有一个名为hello.c的C源文件,你想要编译它生成一个名为hello的可执行文件。以下是一个简单的Makefile:
# 编译器
CC = gcc
# 编译选项
CFLAGS = -Wall -g
# 目标文件
TARGET = hello
# 源文件
SRCS = hello.c
# 依赖文件
DEPS = $(SRCS:.c=.d)
# 默认目标
all: $(TARGET)
# 链接目标文件生成可执行文件
$(TARGET): $(SRCS) $(DEPS)
$(CC) $(CFLAGS) -o $@ $^
# 生成依赖文件
%.d: %.c
$(CC) $(CFLAGS) -MM -MT $(@:.d=.o) $< -MF $@
# 清理生成的文件
clean:
rm -f $(TARGET) $(DEPS)
编译器和编译选项:
CC = gcc
CFLAGS = -Wall -g
CC变量定义了使用的编译器,这里是gcc。CFLAGS变量定义了编译选项,-Wall表示显示所有警告,-g表示包含调试信息。
目标文件和源文件:
TARGET = hello
SRCS = hello.c
TARGET变量定义了最终生成的可执行文件的名称,SRCS变量定义了源文件的列表。
依赖文件:
DEPS = $(SRCS:.c=.d)
DEPS变量定义了依赖文件列表,这里通过将源文件的扩展名从.c改为.d来生成依赖文件。
默认目标:
all: $(TARGET)
all是默认目标,当运行make命令时,它会编译生成$(TARGET)。
链接目标文件生成可执行文件:
$(TARGET): $(SRCS) $(DEPS)
$(CC) $(CFLAGS) -o $@ $^
这条规则定义了如何从源文件和依赖文件生成目标文件。$@表示目标文件,$^表示所有依赖文件。
生成依赖文件:
%.d: %.c
$(CC) $(CFLAGS) -MM -MT $(@:.d=.o) $< -MF $@
这条规则用于生成依赖文件。%.d: %.c表示对于每个.c文件,生成一个对应的.d文件。
清理生成的文件:
clean:
rm -f $(TARGET) $(DEPS)
clean目标用于删除生成的可执行文件和依赖文件。
Makefile文件。Makefile和源文件的目录。make命令来编译程序:make
make clean命令来清理生成的文件:make clean
通过这种方式,你可以轻松地管理和编译你的C或C++项目。