news 2026/8/7 3:11:29

学习笔记——Makefile

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
学习笔记——Makefile

基本概念

Makefile 是工程管理工具,用于编译多个源文件(可能在不同目录下),可以添加编译选项。

基本语法规则

makefile

目标: 依赖 [TAB] 规则命令

版本演进

版本1:直接编译

makefile

a.out: main.c func.c gcc main.c func.c -o a.out

版本2:使用内置变量

makefile

a.out: main.c func.c gcc $^ -o $@ # 不需要依赖文件 clean: rm a.out

内置变量说明:

  • $^:在本条规则中,表示所有的依赖文件

  • $@:在本条规则中,表示目标文件

执行示例:

# 第一次编译 linux@ubuntu:~/20251103/os_app/Make$ make # 源文件未被修改时再次编译 linux@ubuntu:~/20251103/os_app/Make$ make make: 'a.out' is up to date. # 清理生成的文件 make clean

说明:当产生目标文件的相关源文件没有被修改(没有被更新)时,Make 不会重新编译。

版本3:使用自定义变量

makefile

# 定义变量 SRC = main.c SRC += func.c # 追加变量 APP = a.out FLAG = -g # 编译选项,如调试信息 $(APP): $(SRC) gcc $^ -o $@ $(FLAG) clean: rm $(APP)

变量说明:

  • SRC:源文件列表

  • APP:生成的可执行文件名

  • FLAG:编译选项(如-g用于调试)

相关源文件

main.c

#include <stdio.h> #include "func.h" int main() { int a = 10; int b = 20; int c = add(a, b); printf("add is %d\n", c); c = sub(a, b); printf("sub is %d\n", c); }

func.c

int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; }

func.h

#ifndef __FUNC_H_ #define __FUNC_H_ int add(int a, int b); int sub(int a, int b); #endif

注意事项

  1. Makefile 文件名可以是makefileMakefile(建议使用后者)

  2. 命令前的缩进必须是 Tab 键,不能是空格

  3. 当执行make命令后,会在当前目录下查找 Makefile 文件

  4. make clean用于清理生成的文件

  5. Make 会检查文件的更新时间,如果依赖文件比目标文件新,才会重新编译

完整示例 Makefile

makefile

# 变量定义 SRC = main.c func.c APP = a.out FLAG = -g # 默认目标 $(APP): $(SRC) gcc $^ -o $@ $(FLAG) # 清理规则 clean: rm -f $(APP)

这个 Makefile 实现了:

  1. 一键编译所有源文件生成可执行文件

  2. 支持调试选项

  3. 提供清理功能

  4. 自动判断是否需要重新编译

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 4:47:32

aio-switch-updater终极指南:Nintendo Switch定制化完全教程

aio-switch-updater终极指南&#xff1a;Nintendo Switch定制化完全教程 【免费下载链接】aio-switch-updater Update your CFW, cheat codes, firmwares and more directly from your Nintendo Switch! 项目地址: https://gitcode.com/gh_mirrors/ai/aio-switch-updater …

作者头像 李华
网站建设 2026/8/7 1:43:46

Wan2.2-T2V-5B可用于博物馆展品动态复原展示

Wan2.2-T2V-5B&#xff1a;让博物馆的文物“活”起来 &#x1f3fa;✨ 你有没有过这样的体验&#xff1f;站在博物馆的一件青铜器前&#xff0c;看着标签上写着“西周时期&#xff0c;用于祭祀温酒”&#xff0c;脑子里却只能浮现出一个静止的画面——黑乎乎的鼎&#xff0c;摆…

作者头像 李华
网站建设 2026/8/7 15:31:20

typing和dataclass

typing模块里常用的类型注解工具&#xff0c;和 Python 3.9 原生类型的对应关系及用法如下&#xff0c;刚好能匹配你之前的答题系统场景&#xff1a;typing 类型Python 3.9 原生写法作用说明示例List[T]list[T]标注元素类型为 T 的列表answers: list[SingleAnswer]Dict[K, V]di…

作者头像 李华
网站建设 2026/8/7 3:23:08

MindSpore网络编译问题BuildModel error 134

问题描述MindSpore 2.2.10Ascend 910环境&#xff0c;同一份网络定义在GPU侧能完整跑通&#xff0c;切到Ascend后端就卡在GraphCompile阶段&#xff0c;日志只吐一行“BuildModel error 134”&#xff0c;把MS_SUBMODULE_LOG_v调到DEBUG、export GLOG_v3、打开DUMP_GE_GRAPH、D…

作者头像 李华
网站建设 2026/8/7 0:01:46

Node-RED Dashboard实战指南:零基础构建专业数据可视化界面

还在为复杂的数据可视化工具而头疼吗&#xff1f;Node-RED Dashboard为您提供了一条从零开始构建专业级仪表板的捷径。这个基于Node-RED的可视化工具包让数据展示变得前所未有的简单直观&#xff0c;无论您是物联网开发者还是数据分析师&#xff0c;都能快速上手。 【免费下载链…

作者头像 李华