Makefile基础教程
前期准备
在真正使用Makefile之前,我们首先先写四个c文件和相应的h文件,分别是fun0.c,fun1.c,fun2.c,fun0.h,fun1.h,fun2.h以及main.c
//fun0.c
#include "fun0.h"
void print0(){printf("hello world 0");
}
//fun0.h
#include <stdio.h>
void print0(void);
//fun1.c
#include "fun1.h"
void print1(){printf("hello world 1");
}
//fun1.h
#include <stdio.h>
void print1(void);
//fun2.c
#include "fun2.h"
void print2(){printf("hello world 2");
}
//fun2.h
#include <stdio.h>
void print2(void);
//main.c
#include "fun0.h"
#include "fun1.h"
#include "fun2.h"int main(){print0();print1();print2();return 1;
}
如此一来我们就有了如下文件。
编写Makefile文件
接着在当前文件夹下创建名为Makefile的文件,代码如下。编写的时候一定要注意!gcc前面是一个TAB,不要输入空格,否则会出错。
这里解释一下,红色框是指目标文件,而蓝色框是指被依赖的文件,也就是说要想生成冒号左边的文件,就需要依赖冒号右边的文件。
编写完成后,在当前文件夹输入make回车即可。如果生成绿色可执行文件表示本次编译成功。输入./main 即可执行。
Makefile文件优化
在上面,我们编写了四个c文件,每个c文件都需要生成相应的.o对象文件,如果一个项目有成百上千个c文件,那么上面这种写法的代码量就非常大了。因此我们需要对代码进行一些修改。
%是通配符,ABC%DEF就是指以ABC开头,以DEF结尾字符串。重新make一下,也能得到刚刚的结果。
Makefile也可以使用变量,我们可以继续修改刚刚Makefile代码。objs是我们定义的变量,它等于 main.o fun0.o fun1.o fun2.o 这条长长的字符串。调用的方法是 ${变量名}。如此一来代码就更加简洁了。
每次make之后都会生成大量的.o文件,我们可以编写相关命令来删除这些中间文件。clear是自定义的命令,make之后,再输入make clear加回车即可清除.o文件。
Makefile基础教程相关推荐
- Makefile 入门教程
1.Makefile简介 Makefile 定义了软件开发过程中,项目工程编译链.链接的方法和规则. 由 IDE 自动生成或者开发者手动书写. Unix(MAC OS.Solaris)和Linux(R ...
- Make 命令零基础教程
Make这个词,英语的意思是"制作".Make命令直接用了这个意思,就是要做出某个文件.比如,要做出文件a.txt,就可以执行下面的命令. $ make a.txt 但是,如果你真 ...
- Makefile经典教程(掌握这些足够)
http://blog.csdn.net/ruglcc/article/details/7814546 拉轰的专栏 少壮不努力 老大徒伤悲 目录视图 摘要视图 订阅 新版极客头条上线,每天一大波干货 ...
- Linux编写makefile详细教程
Linux下编写 makefile 详细教程 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是goo ...
- Makefile简单教程
Makefile简单教程 基础规则 一个简单的 Makefile 文件包含一系列的"规则",其样式如下: 目标(target)-: 依赖(prerequiries)- <ta ...
- Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现
自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注.虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭 ...
- [SQL基础教程] 1-5 表的删除和更新
[SQL基础教程] 1-5 表的删除和更新 表的删除 语法 DROP TABLE <表名>; 法则 1-12 删除的表无法恢复 表定义的更新 语法 ALTER TABLE<表名> ...
- python 包用法_Python 基础教程之包和类的用法
Python 基础教程之包和类的用法 这篇文章主要介绍了 Python 基础教程之包和类的用法的相关资料, 需要的朋友可以参考下 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido ...
- Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0
Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0 昨晚Nacos社区发布了第一个生产级版本:0.8.0.由于该版本除了Bug修复之外,还提供了几个生产管理非常重要 ...
最新文章
- mysql 常用操作
- 爱创课堂每日一题101天-哪些操作会造成内存泄漏?
- python实现DES算法
- centeos 6.7 mysql 5.7.12_学习centeos7系统 · cdwanze的博文
- JVM调优:使用G1垃圾回收器
- Spring-data-redis集成提交数据出现'maxActive'和‘maxWaitMillis’错误
- 什么是泛型、为什么要使用以及泛型擦除
- php重载,PHP重载基础知识回顾
- Java EE,Gradle和集成测试
- 在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)...
- PRML-系列一之1.6.1
- 某 iOS 零点击 0day 漏洞已存在8年之久且正遭利用?苹果称正在调查并将推出补丁...
- iphone x php兼容吗,有关iOS11和iPhoneX的适配问题
- 【Boost】boost库的随机数的例子
- 最具有中国特色的脑筋急转弯
- java 回调函数实现_Java实现的回调函数
- mdoublem matlab,imhist以及matlab图像矩阵的数据类型
- SVN 配置忽略文件
- android 开屏广告轮播,抖音-TopView(原生开屏)广告投放介绍
- Antv F2双柱状图和折线图的混合写法
热门文章
- 管家婆辉煌版7.2版,超级用户密码忘记了
- SqlServer处于恢复挂起状态
- OCR-Tesseract系列学习——Tesseract for Linux下载与安装
- 数位云Android SDK接入指南
- 计算机右键管理无法访问指定设备,简单几步解决win10打开任务管理器显示无法访问指定设备方法...
- 【电影推荐系统】部署要点总结
- android 微信 备份通讯录,微信备份手机通讯录在哪?怎么用微信备份手机通讯录?...
- struts中文问题,文章集合
- CNAME 和 MX 冲突
- JEP解读与尝鲜系列4 - Java 16 中对于 Project Valhalla 的铺垫