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

 更新时间:2026年02月07日 10:48:29   作者:serve the people  
Makefile是一种自动化构建工具,通过定义规则、依赖关系和执行命令,替代手动重复敲编译、运行和清理等指令,提升开发效率,本文给大家介绍python环境搭建Makefile简单使用方法,感兴趣的朋友跟随小编一起看看吧

Makefile 简单使用方法

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

一、Makefile 核心规则(最基础、最核心)

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

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

二、最简入门示例(编译单个C文件)

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

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

执行命令(终端在Makefile同级目录)

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

三、核心实用特性(简单易上手)

1. 伪目标(.PHONY):避免与同名文件冲突

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

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

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

2. 变量:简化重复代码,方便统一修改

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

.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。

3. 多目标/多依赖:适配多个源文件的场景

如果项目有 main.c 和 func.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)

4. 默认目标:Makefile 第一个目标

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写了个疫情信息快速查看工具实例代码

    Python写了个疫情信息快速查看工具实例代码

    本次使用PyQt5开发了一款疫情信息快速查看工具,实现了多个数据源的查看,代码量不大,功能相当于浏览器,只是限定了一些特定网址,这篇文章主要介绍了Python写了个疫情信息快速查看工具,需要的朋友可以参考下
    2022-11-11
  • 使用Python从有道词典网页获取单词翻译

    使用Python从有道词典网页获取单词翻译

    这篇文章主要介绍了使用Python从有道词典网页获取单词翻译的相关资料,需要的朋友可以参考下
    2016-07-07
  • Python TCP通信客户端服务端代码实例

    Python TCP通信客户端服务端代码实例

    这篇文章主要介绍了Python TCP通信客户端服务端代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python之打印日志库(logging)

    Python之打印日志库(logging)

    这篇文章主要介绍了Python之打印日志库(logging),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • python如何实现常用的五种排序算法详解

    python如何实现常用的五种排序算法详解

    排序有很多种实现方法,比如冒泡排序、选择排序、归并排序、希尔排序、快速排序、插入排序、堆排序、基数排序等,这篇文章主要给大家介绍了关于python如何实现常用的五种排序算法,需要的朋友可以参考下
    2021-08-08
  • Python实现SSH隧道功能的示例代码

    Python实现SSH隧道功能的示例代码

    SSH隧道是利用SSH协议建立一个加密通道,以保护通过不安全网络传输的数据,本文将介绍如何使用Python来实现SSH隧道功能,感兴趣的可以了解下
    2025-02-02
  • 使用Python实现简单的微信控制操作

    使用Python实现简单的微信控制操作

    这篇文章主要为大家详细介绍了如何通过Python去调用Windows API实现模拟人工操作的方式去实现控制微信电脑版,感兴趣的小伙伴可以参考一下
    2025-01-01
  • Python使用tkinter写一个本地密码管理器

    Python使用tkinter写一个本地密码管理器

    闲来无事,看到自己有很多网站的账户密码,有些网站可能打开一两次也就忘记了,下一次在输入账户密码就想不起来,这样很容易丢失账号。所以本文就来用Python和tkinter写一个本地密码管理器吧
    2023-05-05
  • Python自定义sorted排序实现方法详解

    Python自定义sorted排序实现方法详解

    这篇文章主要介绍了Python自定义sorted排序实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 对pyqt5中QTabWidget的相关操作详解

    对pyqt5中QTabWidget的相关操作详解

    今天小编就为大家分享一篇对pyqt5中QTabWidget的相关操作详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06

最新评论