news 2026/5/1 8:36:21

学习笔记——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/4/30 11:01:03

三层立体车库PLC(S7-1200)报告与仿真分享

三层立体车库plc s7-1200 报告和仿真都有。 确保正常运行&#xff0c;虚拟产品&#xff0c;一经售出拒不退款 有主电路图&#xff0c;没有PLC接线图 1、设置启动、停止按钮&#xff0c;且设置指示灯显示车库的开关状态&#xff1b; 2、7个车位的车俩可以自由存取&#xff0c;且…

作者头像 李华
网站建设 2026/5/1 7:17:22

Wan2.2-T2V-A14B生成港珠澳大桥建设奇迹回顾视频

Wan2.2-T2V-A14B生成港珠澳大桥建设奇迹回顾视频 你有没有想过&#xff0c;一段从未被真实记录过的海底隧道沉管对接过程&#xff0c;居然能“复活”在屏幕上&#xff1f;&#x1f30a; 港珠澳大桥&#xff0c;这座横跨伶仃洋的超级工程&#xff0c;许多关键施工环节——尤其是…

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

AI草图转代码终极指南:从涂鸦到网页的魔法之旅 [特殊字符]

AI草图转代码终极指南&#xff1a;从涂鸦到网页的魔法之旅 &#x1f3a8; 【免费下载链接】ailab Experience, Learn and Code the latest breakthrough innovations with Microsoft AI 项目地址: https://gitcode.com/gh_mirrors/ai/ailab 你是否曾幻想过&#xff0c;只…

作者头像 李华
网站建设 2026/4/30 9:39:44

芯片可靠性守护神:动态电压应力测试(DVS)完全解析

在芯片制程不断微缩的今天&#xff0c;5纳米、3纳米先进工艺已成为常态&#xff0c;芯片内部集成了上百亿个晶体管。这些微小结构在复杂的工作环境下&#xff0c;如同行走在钢丝上&#xff0c;任何微小的缺陷都可能导致整个芯片失效。而动态电压应力测试&#xff08;DVS&#x…

作者头像 李华
网站建设 2026/4/24 13:42:25

Blender骨骼动画重定向:5分钟掌握高效动画转移技巧

Blender骨骼动画重定向&#xff1a;5分钟掌握高效动画转移技巧 【免费下载链接】blender_BoneAnimCopy 用于在blender中桥接骨骼动画的插件 项目地址: https://gitcode.com/gh_mirrors/bl/blender_BoneAnimCopy 还在为不同角色间的动画适配而烦恼吗&#xff1f;Bone Ani…

作者头像 李华
网站建设 2026/4/28 21:38:46

重新理解晋升

你好&#xff0c;我是华仔。欢迎来到这门课&#xff0c;和我一起学习职场晋升。 2018 年&#xff0c;我在极客时间开了一门课&#xff0c;《从 0 开始学架构》。我和你分享了自己多年研究和实践积累得到的一套完整的架构设计方法论&#xff0c;来帮助你提升架构设计的能力。 …

作者头像 李华