C/C++ 项目构建指南:如何使用 Makefile 提高开发效率


使用 Makefile 可以帮助你在 C/C++ 项目中自动化构建过程,从而提高开发效率。下面是一个简单的 Makefile 示例,说明了如何使用 Makefile 来构建一个 C/C++ 项目:

# 编译器设置
CC = gcc
CXX = g++
CFLAGS = -Wall -Wextra -g
CXXFLAGS = -Wall -Wextra -g

# 目标文件名
TARGET = myprogram

# 源文件目录
SRCDIR = src
# 头文件目录
INCDIR = include
# 中间文件目录
OBJDIR = obj

# 源文件列表(.c 文件)
SRCS = $(wildcard $(SRCDIR)/*.c)
# 中间目标文件列表(.o 文件)
OBJS = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SRCS))
# 头文件搜索路径
INC = -I$(INCDIR)

# 默认构建目标
all: $(TARGET)

# 生成目标文件
$(OBJDIR)/%.o: $(SRCDIR)/%.c
    @mkdir -p $(OBJDIR)
    $(CC) $(CFLAGS) $(INC) -c -o $@ $<

# 链接生成可执行文件
$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) -o $@ $^

# 清理生成的文件
clean:
    @rm -rf $(OBJDIR) $(TARGET)

# 定义伪目标,防止与文件同名的文件冲突
.PHONY: all clean

在这个 Makefile 中:

  • CCCXX 分别定义了 C 和 C++ 编译器。
  • CFLAGSCXXFLAGS 定义了编译选项,例如警告开启 (-Wall) 和调试信息 (-g)。
  • TARGET 定义了最终生成的可执行文件名。
  • SRCDIR 定义了源文件目录,INCDIR 定义了头文件目录,OBJDIR 定义了中间文件目录。
  • SRCS 定义了所有的源文件列表,OBJS 定义了对应的中间目标文件列表。
  • INC 定义了头文件搜索路径。
  • all 是默认构建目标,依赖于 $(TARGET)
  • $(OBJDIR)/%.o: $(SRCDIR)/%.c 规则将每个源文件编译为对应的中间目标文件。
  • $(TARGET): $(OBJS) 规则将所有中间目标文件链接为最终的可执行文件。
  • clean 是清理目标,用于删除中间文件和可执行文件。
  • .PHONY 定义了伪目标,防止与同名文件发生冲突。

要使用这个 Makefile,将它保存为名为 Makefile 的文件,然后在终端中运行 make 命令即可构建项目。要清理生成的文件,可以运行 make clean


原文链接:codingdict.net