博客不会讲解的太细致深入,推荐先看视频再看博客

  视频链接,推荐去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讲解的更多相关文章

  1. Linux makefile 教程 非常详细,且易懂(转)

    转自:http://blog.chinaunix.net/uid-27717694-id-3696246.html 原文地址:Linux makefile 教程 非常详细,且易懂 作者:Deem_pa ...

  2. Linux Makefile自动生成--config.h

    Linux Makefile自动生成--config.h http://blog.csdn.net/spch2008/article/details/12510805

  3. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  4. Linux Makefile文件编写详细步骤与实践

    Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...

  5. 【转】Linux makefile 教程 非常详细,且易懂

    From: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...

  6. Linux makefile 教程 非常详细,且易懂

    最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...

  7. linux Makefile obj-m obj-y

    目标定义是Kbuild Makefile的主要部分,也是核心部分.主要是定义了要编 译的文件,所有的选项,以及到哪些子目录去执行递归操作. 最简单的Kbuild makefile 只包含一行: 例子: ...

  8. Linux makefile 教程 非常详细,且易懂 (转)

    概述—— 什么是makefile?或许很多Winodws的程序员都不知道这 个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...

  9. Linux makefile教程之后序十一[转]

    后序 —— 终 于到写结束语的时候了,以上基本上就是GNU make的Makefile的所有细节了.其它的产商的make基本上也就是这样的,无论什么样的make,都是以文件的依赖性为基础的,其基本是都 ...

随机推荐

  1. PowerBI开发 第十一篇:报表设计技巧(更新)

    PowerBI版本在持续的更新,这使得报表设计能够实现更多新的功能,您可以访问 PowerBI Blog查看PowerBI的最新更新信息,本文总结了PowerBI新版本的重要更新和设计技巧. 我的Po ...

  2. C#对战小游戏,持续更新(里面暂无内容,标记插眼)

    做的乱七八糟的 很明显的一点,对集合.数组.类的理解和运用   很差.很差.很差 今儿不做了,马德,头都肿大了 休息一下,捋一捋

  3. Js_数组操作

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ...

  4. Windows 10无法使用debug的解决方案

    在学习汇编语言的时候,XP系统或者更早版本的默认在Dos命令下敲入debug即可进入汇编指令模式下,而在Windows 7及更高版本下,这些功能似乎都被阉割了,所以今天我们讲带大家处理一下如何解决这个 ...

  5. numpy 初识(三)

    基本运算 exp: e sqrt:开放 floor:向下取整 ravel:矩阵拉成一个向 T:转置(行和列变换) 改变形状: resize: 更改其形状(返回值为None)a.resize(6,2) ...

  6. win10引导错误的修复(内容系转载)

    #!尊重原作者,再此声明此内容属于网络转载,只是为了能保留下来方便日后查阅!!! win10误删引导文件,0xc0000098的解决方案,bcd引导文件受损情况分析 一.※相对简单的解决方法,对应的情 ...

  7. c#版flappybird 未完全实现

    这些天开始在深圳找工作,想着把从前有些淡忘的技术再温故下.看到尊敬的<传智播客>有一期公开课,讲的是用c#编写flappybird小游戏,也就自己搜了下游戏资源,也来试试看. 其实用到的技 ...

  8. 第二阶段冲刺——five

    个人任务: 王金萱:合并程序(统计团队博客). 季方:合并并排除运行团队博客时出现的错误. 马佳慧:优化登录.注册信息的填写判断. 司宇航:完成打印名单的功能. 站立会议: 任务看板和燃尽图:

  9. HashMap相关总结

    1.HashMap:根据键值hashCode值存储数据,大多数情况下可以直接定位到它的值,但是遍历顺序不确定.所有哈希值相同的值存储到同一个链表中                         Ha ...

  10. 四则运算安卓版ver.mk2

    做了一点微小的变动....非常微小...不过美观点了就是...那就是----加背景! 变更后的部分代码: <LinearLayout xmlns:android="http://sch ...