Makefile语法
Makefile是构建自动化工具,常用于管理C/C++等编程语言的编译过程。它定义了一系列规则,指示操作系统如何从源代码构建可执行文件或其他目标文件。了解Makefile的语法和基本用法对于任何程序员来说都至关重要,因为它可以帮助提高开发效率,避免重复劳动。 在Makefile中,规则是最基本的组成部分。一个规则由三部分组成:目标(target)、依赖项(prerequisites)和命令(command)。例如: ```make edit : main.o kbd.o command.o display.o insert.o search.o files.o utils.o cc -o edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o ``` 在这个例子中,`edit`是目标,而一系列`.o`文件是依赖项。当目标比依赖项更新时,或者依赖项被修改了,`cc -o edit`这一系列命令会被执行,将对象文件链接成可执行文件`edit`。 每个命令前必须有一个制表符(\t),而不是多个空格,这是Makefile中的规范。如果不遵循这个规则,make可能会无法正确解析命令。 接下来,我们看到变量的使用可以简化Makefile。`objects`变量包含了所有对象文件,这样我们可以简洁地重写规则: ```make objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.o edit : $(objects) cc -o edit $(objects) ``` 这里,`$(objects)`会扩展为所有对象文件的名字,避免了重复书写。 Makefile还支持隐含规则,比如对于C文件,通常有`%.o : %.c`这样的规则,意味着如果有一个`.c`文件,那么通过`cc -c`编译就可以得到对应的`.o`文件。因此,我们实际上可以进一步简化Makefile,利用这个隐含规则: ```make objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.o edit : $(objects) cc -o edit $(objects) $(objects) : %.o : %.c defs.h cc -c $< clean : rm edit $(objects) ``` 在这个版本中,`%.o : %.c defs.h`表示任何`.o`文件都可以通过对应的`.c`文件和`defs.h`头文件来创建,而`$<`代表规则中的第一个依赖项,也就是`.c`文件。 Makefile的语法和应用包括定义规则、使用变量、利用隐含规则等。通过编写清晰、高效的Makefile,开发者能够有效地组织项目构建流程,提高工作效率。理解并熟练运用Makefile是每一个程序员的基本技能之一。
剩余60页未读,继续阅读
- roc19842014-07-07英文的,不好懂,还是要找中文的便于理解
- lnch0012013-03-07文档还算详细,不过是英文的
- 粉丝: 28
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- STM32F103上位机升级,RS485升级、CAN升级
- 前端分析-2023071100789
- 蓝牙BLE扫描、连接及数据传输,做了分包处理,支持大量数据.zip
- 机械设计5th螺旋压榨机sw16非常好的设计图纸100%好用.zip
- 基于RNN的文本翻译模型的设计、实现与优化
- 计算机科学及软件工程面试问题集锦,包括大厂真题,Java基础,数据库,框架,Linux,大数据,常用工具等.zip
- 该项目可以帮助您实现大批量从pdf文件中导出表格数据 .zip
- 153504892134561YX55658-RC522射频卡用户使用手册资料Ver_1.0-190509.zip
- testesttestetew
- DolphinScheduler 分布式调度系统二开达梦数据库初始化sql
- 超大xml解析导入数据库、千万级别大数据导出到Excel 实现核心高性能、分段、分页循环读取-写入-清空内存 解决传统方式的超大数据导致内存溢出.zip
- com.android.vending44.1.17-23-1.apk
- 轻松输出Java应用日志到七牛云大数据日志平台.zip
- 前端分析-2023071100789
- 这是 某宝 卖大几千的压枪源码,不做任何数据读取以及侵入,这里采用外数据采集(IMG), 至今可以使用,无视任何更新(新武器,以及新武器的压枪规则,需要自己调试,在data-config下);.zip
- 前端分析-2023071100789