温馨提示×

ubuntu gcc如何编写Makefile文件

小樊
54
2025-09-02 13:07:00
栏目: 智能运维

在Ubuntu系统中,使用GCC编译C或C++程序时,编写Makefile文件可以帮助自动化编译过程。以下是一个简单的Makefile文件示例,以及如何使用它来编译一个C程序。

示例Makefile

假设你有一个名为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)

解释

  1. 编译器和编译选项

    CC = gcc
    CFLAGS = -Wall -g
    

    CC变量定义了使用的编译器,这里是gccCFLAGS变量定义了编译选项,-Wall表示显示所有警告,-g表示包含调试信息。

  2. 目标文件和源文件

    TARGET = hello
    SRCS = hello.c
    

    TARGET变量定义了最终生成的可执行文件的名称,SRCS变量定义了源文件的列表。

  3. 依赖文件

    DEPS = $(SRCS:.c=.d)
    

    DEPS变量定义了依赖文件列表,这里通过将源文件的扩展名从.c改为.d来生成依赖文件。

  4. 默认目标

    all: $(TARGET)
    

    all是默认目标,当运行make命令时,它会编译生成$(TARGET)

  5. 链接目标文件生成可执行文件

    $(TARGET): $(SRCS) $(DEPS)
    	$(CC) $(CFLAGS) -o $@ $^
    

    这条规则定义了如何从源文件和依赖文件生成目标文件。$@表示目标文件,$^表示所有依赖文件。

  6. 生成依赖文件

    %.d: %.c
    	$(CC) $(CFLAGS) -MM -MT $(@:.d=.o) $< -MF $@
    

    这条规则用于生成依赖文件。%.d: %.c表示对于每个.c文件,生成一个对应的.d文件。

  7. 清理生成的文件

    clean:
    	rm -f $(TARGET) $(DEPS)
    

    clean目标用于删除生成的可执行文件和依赖文件。

使用Makefile

  1. 将上述内容保存为Makefile文件。
  2. 在终端中导航到包含Makefile和源文件的目录。
  3. 运行make命令来编译程序:
    make
    
  4. 运行make clean命令来清理生成的文件:
    make clean
    

通过这种方式,你可以轻松地管理和编译你的C或C++项目。

0