python环境搭建Makefile简单使用步骤

作者:

文章目录
  • Makefile 是自动化构建工具,核心作用是定义项目的构建规则、依赖关系和执行命令,通过 make 命令自动执行,替代手动重复敲编译/运行/清理等指令,大幅提升开发效率,尤其适合C/C++项目,也可用于Python/Go等各类项目的自动化流程管理。
  • 目录
    • Makefile 简单使用方法
      • 一、Makefile 核心规则(最基础、最核心)
      • 二、最简入门示例(编译单个C文件)
        • 执行命令(终端在Makefile同级目录)
      • 三、核心实用特性(简单易上手)
        • 1. 伪目标(.PHONY):避免与同名文件冲突
        • 2. 变量:简化重复代码,方便统一修改
        • 3. 多目标/多依赖:适配多个源文件的场景
        • 4. 默认目标:Makefile 第一个目标
      • 四、稍完整的实用示例(覆盖核心用法)
        • 执行命令
      • 五、关键使用要点
        • 六、核心总结

        Makefile 是自动化构建工具,核心作用是定义项目的构建规则、依赖关系和执行命令,通过 make 命令自动执行,替代手动重复敲编译/运行/清理等指令,大幅提升开发效率,尤其适合C/C++项目,也可用于Python/Go等各类项目的自动化流程管理。

        Makefile 的核心是规则,一个规则对应一个构建目标,基本格式固定,命令行前必须用 Tab 键缩进(空格会报错,这是最常见的坑):

        # 格式:目标: 依赖文件/依赖目标
        # 	    执行的命令(Tab 开头,可多行)
        目标(target): 依赖(dependencies)
        	命令1(shell 命令均可,如gcc、rm、python等)
        	命令2
        • 目标:要生成的文件(如可执行文件、目标文件)或「伪目标」(如clean、run,无实际文件生成);
        • 依赖:生成目标所需的文件/其他目标(如编译可执行文件需要的.c源文件);
        • 命令:从依赖生成目标的shell指令,按顺序执行。

        以编译C文件 main.c 生成可执行文件 app 为例,创建名为 Makefile(或 makefile,首字母大小写均可)的文件,内容如下:

        # 最简Makefile:生成可执行文件app
        app: main.c
        	gcc main.c -o app  # Tab 开头,编译命令
        # 清理目标:删除生成的可执行文件
        clean:
        	rm -f app  # -f 强制删除,避免文件不存在时报错

        make        # 执行第一个目标(app),自动编译
        make clean  # 执行clean目标,清理生成的文件

        如果目录下有个文件叫 clean,直接执行 make clean 会失效,用 .PHONY 声明「伪目标」,表示这不是实际要生成的文件,强制执行命令:

        .PHONY: clean  # 声明clean为伪目标
        app: main.c
        	gcc main.c -o app
        clean:
        	rm -f app

        常用伪目标all(构建所有目标)、clean(清理)、run(运行程序)、install(安装)。

        定义变量后用 $(变量名) 引用,适合重复使用的内容(如编译器、编译参数、源文件),修改一处即可全局生效:

        .PHONY: clean run
        CC = gcc        # 定义编译器变量
        CFLAGS = -Wall  # 编译参数(-Wall 显示所有警告)
        TARGET = app    # 可执行文件名称
        SRC = main.c    # 源文件
        # 引用变量,简化规则
        $(TARGET): $(SRC)
        	$(CC) $(SRC) -o $(TARGET) $(CFLAGS)
        run: $(TARGET)  # 运行目标,依赖app(先编译再运行)
        	./$(TARGET)
        clean:
        	rm -f $(TARGET)

        执行 make run,会自动先编译 app,再运行 ./app

        如果项目有 main.cfunc.c 两个源文件,直接将多个依赖写在目标后即可:

        .PHONY: clean
        CC = gcc
        TARGET = app
        # 多依赖:生成app需要main.c和func.c
        $(TARGET): main.c func.c
        	$(CC) main.c func.c -o $(TARGET)
        clean:
        	rm -f $(TARGET)

        make 命令不加任何参数时,会自动执行第一个目标,通常用 all 作为第一个目标,指定要构建的所有核心目标:

        .PHONY: all clean run  # all作为第一个目标,成为默认目标
        all: app  # all依赖app,执行make即执行make all,编译app
        CC = gcc
        TARGET = app
        SRC = main.c
        $(TARGET): $(SRC)
        	$(CC) $(SRC) -o $(TARGET)
        run: $(TARGET)
        	./$(TARGET)
        clean:
        	rm -f $(TARGET)

        整合变量、伪目标、多依赖、运行/清理,适合大部分小型项目:

        # 声明伪目标:all(默认)、clean(清理)、run(运行)
        .PHONY: all clean run
        # 定义变量:编译器、参数、目标文件、所有源文件
        CC = gcc
        CFLAGS = -Wall -g  # -g 生成调试信息,方便gdb调试
        TARGET = myapp
        # 所有源文件(多个用空格分隔)
        SRC = main.c func.c tool.c
        # 默认目标:构建可执行文件
        all: $(TARGET)
        # 构建规则:多源文件编译
        $(TARGET): $(SRC)
        	@echo "开始编译..."  # @echo 执行时不显示命令本身,只显示输出
        	$(CC) $(SRC) -o $(TARGET) $(CFLAGS)
        	@echo "编译完成!生成文件:$(TARGET)"
        # 运行程序:先编译再运行
        run: $(TARGET)
        	@echo "运行程序:"
        	./$(TARGET)
        # 清理生成的文件
        clean:
        	@echo "清理文件..."
        	rm -f $(TARGET)
        	@echo "清理完成"

        make        # 编译(默认执行all)
        make run    # 编译+运行
        make clean  # 清理

        1. 命令行前必须用 Tab 缩进,不能用空格(编辑器需关闭「Tab自动转空格」);
        2. 注释用 # 开头,单行注释;
        3. 执行命令时,加 @ 可隐藏命令本身(如 @echo 只显示输出,不显示echo 开始编译...);
        4. Makefile 会自动检查依赖文件的修改时间:如果依赖文件(如.c)比目标文件(如可执行文件)新,才会重新编译,否则跳过(节省构建时间)。

        1. Makefile 核心是规则(目标:依赖 + Tab命令),用于定义自动化构建流程;
        2. 必学特性:Tab 缩进、伪目标(.PHONY)、变量($(变量))、默认目标(第一个);
        3. 常用命令:make(执行默认目标)、make 目标名(执行指定目标,如make clean/run);
        4. 核心价值:替代手动重复指令,自动检查文件修改、按需构建,适合所有需要重复执行固定流程的项目。

        到此这篇关于python环境搭建Makefile简单使用步骤的文章就介绍到这了,更多相关python makefile使用内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

        您可能感兴趣的文章:

        • Python实现生成简单的Makefile文件代码示例
        • Go Generate 代替 Makefile使用方法详解
        • Makefile构建Golang项目示例详解
        • Go项目编写Makefile规则文件概述

        站内搜索