Linux makefile讲解
博客不会讲解的太细致深入,推荐先看视频再看博客
视频链接,推荐去B站观看,B站比较清晰...
土豆网:http://www.tudou.com/programs/view/19VZ0f3b_I0
B站: http://www.bilibili.com/video/av9655080/
在linux中编译.c文件的时候,可以用gcc命令,当然了,如果是100个.c文件你怎么办?这个时候你最好创建一套规则来使用,这时我们就用到了makefile,一切东西的发明创造都是为了方便。
现在我有一个.c文件叫test.c,内容如下:
#include <stdio.h>
void main()
{
printf("hello wold! \n");
}
然后嘞,我用makefile来搞定它!(注意这是在同一个目录下的哦)
test:test.o //目标:依赖关系
gcc test.o -o test //注意!这里的是tab键,不是空格,不打tab键会出错的
test.o:test.c
gcc -c test.c -o test.o
clean:
rm *.o test
这就是一个最简单的makefile啦,执行的时候只需要make一下就ok了 (如果你看不懂就去看我的视频,我会讲解为什么要这么写)
看过上面的例子之后可能有人会说makefile的优越性在哪?别急,下面我们来6个.c文件,分别是 m.c m.h visit.c play.c listen.c watch.c study.c
m.c
#include <stdio.h>
void main()
{
int i;
printf("please input the value of i from 1 to 5 :\n");
scanf("%d",&i);
if(i==)
visit();
else if(i==)
study();
else if(i==)
play();
else if(i==)
watch();
else if(i==)
listen();
else
printf("nothing to do \n");
printf("This is a woderful day\n"); }
study.c
#include <stdio.h>
void main()
{
void study()
{
printf("study embedded system today \n");
}
}
listen.c
#include <stdio.h>
void main()
{
void listen()
{
printf("listen english today \n");
}
}
play.c
#include <stdio.h>
void main()
{
void study()
{
printf("play football today \n");
}
}
visit.c
#include <stdio.h>
void main()
{
void study()
{
printf("visit friend today \n");
}
}
watch.c
#include <stdio.h>
void main()
{
void watch()
{
printf("watch TV today \n");
}
}
我是不是写了一个m.h文件?这个叫头文件,也叫引用文件,因为m.c里面用了visit(),play()...方法,所以我们也来写一下m.h
void visit();
void listen();
void watch();
void study();
void play();
这里列举了6个.c文件和一个.h文件,现在我们来写makefile
CC=gcc
TARGET=ALL
OBJECTS=m.o visit.o listen.o watch.o study.o play.o
$(TARGET):$(OBJECTS)
$(CC) $(OBJECTS) -o m
m.o:m.c m.h //这里m.o和m.h一起
$(CC) -c m.c -o m.o
visit.o:visit.c
$(CC) -c visit.c -o visit.o
listen.o:listen.c
$(CC) -c listen.c -o listen.o
watch.o:watch.c
$(CC) -c watch.c -o watch.o
study.o:study.c
$(CC) -c study.c -o study.o
play.o:play.c
$(CC) -c play.c -o play.o
clean:
rm *.o m
这个应该很好懂的,最后嘞,我介绍一下怎么使用变量来简化操作
CC=gcc
TARGET=ALL
OBJECTS=m.o visit.o listen.o watch.o study.o play.o
$(TARGET):$(OBJECTS)
$(CC) $(OBJECTS) -o m
m.o:m.c m.h
$(CC) -c m.c -o m.o
*.o:*.c // *可以代替目标名称,因为依赖和目标名一样,所以都可以用*来代替
$(CC) -c $< -o $@ // $<的意思是依赖,$@的意思是目标
clean:
rm *.o
makefile呢分为在同一个文件下面和不同一个文件下面,我只讲了在同一个文件下面,那个大家自己去查也很简单,就酱~
Linux makefile讲解的更多相关文章
- Linux makefile 教程 非常详细,且易懂(转)
转自:http://blog.chinaunix.net/uid-27717694-id-3696246.html 原文地址:Linux makefile 教程 非常详细,且易懂 作者:Deem_pa ...
- Linux Makefile自动生成--config.h
Linux Makefile自动生成--config.h http://blog.csdn.net/spch2008/article/details/12510805
- 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序
很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...
- Linux Makefile文件编写详细步骤与实践
Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...
- 【转】Linux makefile 教程 非常详细,且易懂
From: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...
- Linux makefile 教程 非常详细,且易懂
最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...
- linux Makefile obj-m obj-y
目标定义是Kbuild Makefile的主要部分,也是核心部分.主要是定义了要编 译的文件,所有的选项,以及到哪些子目录去执行递归操作. 最简单的Kbuild makefile 只包含一行: 例子: ...
- Linux makefile 教程 非常详细,且易懂 (转)
概述—— 什么是makefile?或许很多Winodws的程序员都不知道这 个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...
- Linux makefile教程之后序十一[转]
后序 —— 终 于到写结束语的时候了,以上基本上就是GNU make的Makefile的所有细节了.其它的产商的make基本上也就是这样的,无论什么样的make,都是以文件的依赖性为基础的,其基本是都 ...
随机推荐
- 分布式Redis缓存串讲(一)
互联网应用的基石 现在流量稍微大些的网站,都会采取Redis.基于Redis的内存缓存特性,可以大幅度降低数据库的访问量,大大提升了网站的并发能力,充当数据库的削量先锋.既然Redis这么重要,我们从 ...
- GIT版本控制工具总结
1.安装GIT 现在的Linux和Unix包括MAC有的已经自带git,没有自带git的话,在Debian或Ubuntu Linux系统下执行sudo apt-get install git或者sud ...
- hdu 2036:改革春风吹满地(叉积求凸多边形面积)
改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- OpenMPI源码剖析:网络通信原理(二) 如何选择网络协议?
因为比较常用的是 TCP 协议,所以在 opal/mca/btl/tcp/btl_tcp.h 头文件中找到对应的 struct mca_btl_tcp_component_t { mca_btl_ba ...
- Individual Project Records
At the midnight of September 20, I finished my individual projcet -- a word frequency program. You c ...
- 实验作业:使gdb跟踪分析一个系统调用内核函数
实验作业:使gdb跟踪分析一个系统调用内核函数(我使用的是getuid) 20135313吴子怡.北京电子科技学院 [第一部分] 根据视频演示的步骤,先做第一部分,步骤如下 ①更新menu代码到最新版 ...
- 20135316Linux内核学习笔记第五周
20135316王剑桥<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给MenuOS增加time和t ...
- c# dataGridView cell添加下拉框
应用场景: dataGridView需要某一个cell变成下拉框样式. 思路详解: dataGridVie添加固定格式的row. 代码: DataGridViewRow row = new DataG ...
- Jquery封装ajax
Jquery封装ajax Load方法 <!-- 将jquery.js导入进来 --> <script type="text/javascript&qu ...
- 团队工作总结及自评 & 补上来的用户调研
http://www.cnblogs.com/case1/ 让同学代发了,辛苦点跳转一下~