跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

Linux 下 make 与 Makefile 基础用法

Linux 环境下 make 构建工具及 Makefile 文件的基本概念、语法规则、变量定义、常用函数及隐含规则。通过示例展示了如何编写 Makefile 进行项目编译,并列举了常用的 make 命令选项,帮助开发者自动化构建流程。

灭霸发布于 2026/3/21更新于 2026/7/2444 浏览
Linux 下 make 与 Makefile 基础用法

Linux 下 make 与 Makefile 基础用法

1. 什么是 make, makefile,作用

make 是一个自动化构建工具,根据文件的时间戳判断哪些文件需要重新编译,从而减少重复编译的时间。

Makefile 是 make 读取的配置文件,定义了构建规则、依赖关系和执行命令。

2. 基本概念:目标,依赖,命令

一个 Makefile 主要由规则组成,每条规则的格式如下:

目标:依赖项 命令

  • 目标(target):通常是要生成的文件名,也可以是伪目标(如 clean)。
  • 依赖项(prerequisites):生成目标所依赖的文件或其他目标。
  • 命令(recipe):由 Shell 执行的命令,必须以 Tab 键开头。

示例:

main: main.cc
	g++ -o main main.cc

执行 make 时,若 main.cc 比 main 新,则执行 g++ 命令。

3. makefile 基本语法

  • 注释:以 # 开头。
  • 多目标规则:一个规则可生成多个目标。
  • 伪目标:不代表真实文件,常用于清理等操作,需声明为 .PHONY。

示例:

.PHONY: clean
clean:
	rm -f main *.o

4. 变量:定义和使用,自动变量

  • 定义变量:变量名 = 值 或 变量名 := 值(立即展开)。
  • 使用变量:$(变量名) 或 ${变量名}。
  • 自动变量:
    • $@:目标
    • $^:所有目标依赖
    • $<:目标依赖列表中的第一个依赖
    • $?:所有目标依赖中被修改过的文件

示例:

CC = gcc
CFLAGS = -Wall
main: main.cc
	$(CC) $(CFLAGS) -o $@ $^

5. 常用函数 wildcard

  • 通配符:$(wildcard 模式),如 $(wildcard *.c)
  • 模式替换:$(patsubst 模式,替换,文本),如
$(patsubst %.c,%.o,$(wildcard *.c))
  • 文件操作:$(addprefix 前缀,列表)、$(addsuffix 后缀,列表) 等。
  • 6. 隐含规则

    make 内置了一些常用规则,例如从 .c 文件生成 .o 文件的规则:

    %.o: %.c
    	$(CC) -c $(CFLAGS) $< -o $@
    

    也可以使用内置变量 CC,CFLAGS 等自定义

    7. 调用 make

    Makefile 示例:

    CC = g++
    CFLAGS = -Wall
    SRCDIR = src
    OBJDIR = obj
    SRCS = $(wildcard $(SRCDIR)/*.cc)
    OBJS = $(patsubst $(SRCDIR)/%.cc,$(OBJDIR)/%.o,$(SRCS))
    TARGET = myapp
    
    $(TARGET): $(OBJS)
    	$(CC) -o $@ $^
    
    $(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
    	$(CC) $(CFLAGS) -c $< -o $@
    
    .PHONY: clean
    clean:
    	rm -rf $(OBJDIR) $(TARGET)
    

    常用 make 命令选项:

    • make:默认执行第一个目标。
    • make 目标:指定构建的目标。
    • make -n:打印要执行的命令但不执行(dry run)。
    • make -B:强制重新编译所有目标。
    • make -d:打印调试信息。
    • make -jN:并行执行 N 个任务

    目录

    1. Linux 下 make 与 Makefile 基础用法
    2. 1. 什么是 make, makefile,作用
    3. 2. 基本概念:目标,依赖,命令
    4. 3. makefile 基本语法
    5. 4. 变量:定义和使用,自动变量
    6. 5. 常用函数 wildcard
    7. 6. 隐含规则
    8. 7. 调用 make
    • 免费图片AI生成工具免费生成了解详情
    • Magick API 一键接入全球大模型注册送1000万token查看
    • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
    • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
    • 100+免费在线小游戏爽一把
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • 清华大学发布仿生多模态触觉传感器 SuperTac,结合大模型实现类人感知
    • 大模型训练原理深度解析:以 GPT-1 为例
    • 解决 npm 安装 OpenClaw 时的 Git 权限与依赖报错
    • 基于改进 YOLOv11n 的无人机红外目标检测算法
    • NVIDIA DGX Spark 部署 Stable Diffusion 3.5 与 ComfyUI
    • Python SQLAlchemy ORM 数据库操作指南
    • Win11 + IDEA 集成 Codex 大模型开发环境搭建指南
    • Java核心语法:从变量到流程控制
    • Python 基础语法入门:常量、变量与运算符
    • Python 在 Windows 上的安装与 PyCharm 配置指南
    • Python 3.10 的 6 个核心新特性详解
    • AMD显卡Vulkan后端兼容性修复与llama.cpp本地化部署指南
    • Windows 本地部署 OpenClaw:搭建 AI 助理并打通微信飞书
    • Edge 浏览器运行 Google AI Studio 与 ChatGPT 网页版卡顿优化方案
    • Ubuntu 安装 Docker 教程(含配置镜像加速与常见命令)
    • Windows 环境本地大模型工具链安装教程:Ollama + llama.cpp + LLaMA Factory
    • Java 编译报错:源发行版 17 需要目标发行版 17 排查指南
    • Java Servlet 核心原理与 Spring Boot 实战指南
    • IDEA 连接 Gitee 配置及代码推送指南
    • Llama-Factory 用于养生食谱推荐与健康管理 APP 集成

    相关免费在线工具

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

    • Markdown转HTML

      将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

    • HTML转Markdown

      将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

    • JSON 压缩

      通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

    • JSON美化和格式化

      将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online