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

  视频链接,推荐去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,内容如下:

  1. #include <stdio.h>
  2. void main()
  3. {
  4. printf("hello wold! \n");
  5. }

  然后嘞,我用makefile来搞定它!(注意这是在同一个目录下的哦)

  1. test:test.o //目标:依赖关系
  2. gcc test.o -o test //注意!这里的是tab键,不是空格,不打tab键会出错的
  3. test.o:test.c
  4. gcc -c test.c -o test.o
  5. clean:
  6. 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

  1. #include <stdio.h>
  2. void main()
  3. {
  4. int i;
  5. printf("please input the value of i from 1 to 5 :\n");
  6. scanf("%d",&i);
  7. if(i==)
  8. visit();
  9. else if(i==)
  10. study();
  11. else if(i==)
  12. play();
  13. else if(i==)
  14. watch();
  15. else if(i==)
  16. listen();
  17. else
  18. printf("nothing to do \n");
  19. printf("This is a woderful day\n");
  20.  
  21. }

  study.c

  1. #include <stdio.h>
  2. void main()
  3. {
  4. void study()
  5. {
  6. printf("study embedded system today \n");
  7. }
  8. }

  listen.c

  1. #include <stdio.h>
  2. void main()
  3. {
  4. void listen()
  5. {
  6. printf("listen english today \n");
  7. }
  8. }

  play.c

  1. #include <stdio.h>
  2. void main()
  3. {
  4. void study()
  5. {
  6. printf("play football today \n");
  7. }
  8. }

  visit.c

  1. #include <stdio.h>
  2. void main()
  3. {
  4. void study()
  5. {
  6. printf("visit friend today \n");
  7. }
  8. }

  watch.c

  1. #include <stdio.h>
  2. void main()
  3. {
  4. void watch()
  5. {
  6. printf("watch TV today \n");
  7. }
  8. }

  我是不是写了一个m.h文件?这个叫头文件,也叫引用文件,因为m.c里面用了visit(),play()...方法,所以我们也来写一下m.h

  1. void visit();
  2. void listen();
  3. void watch();
  4. void study();
  5. void play();

  这里列举了6个.c文件和一个.h文件,现在我们来写makefile

  1. CC=gcc
  2. TARGET=ALL
  3. OBJECTS=m.o visit.o listen.o watch.o study.o play.o
  4. $(TARGET):$(OBJECTS)
  5. $(CC) $(OBJECTS) -o m
  6. m.o:m.c m.h //这里m.o和m.h一起
  7. $(CC) -c m.c -o m.o
  8. visit.o:visit.c
  9. $(CC) -c visit.c -o visit.o
  10. listen.o:listen.c
  11. $(CC) -c listen.c -o listen.o
  12. watch.o:watch.c
  13. $(CC) -c watch.c -o watch.o
  14. study.o:study.c
  15. $(CC) -c study.c -o study.o
  16. play.o:play.c
  17. $(CC) -c play.c -o play.o
  18. clean:
  19. rm *.o m

  这个应该很好懂的,最后嘞,我介绍一下怎么使用变量来简化操作

  1. CC=gcc
  2. TARGET=ALL
  3. OBJECTS=m.o visit.o listen.o watch.o study.o play.o
  4. $(TARGET):$(OBJECTS)
  5. $(CC) $(OBJECTS) -o m
  6. m.o:m.c m.h
  7. $(CC) -c m.c -o m.o
  8. *.o:*.c // *可以代替目标名称,因为依赖和目标名一样,所以都可以用*来代替
  9. $(CC) -c $< -o $@ // $<的意思是依赖,$@的意思是目标
  10. clean:
  11. 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. jqGrid 列内容超过一定长度省略表示

    jqgrid初始化方法中的,对应列添加formatter方法 colNames : [ "描述" ], colModel : [ { name : 'description', i ...

  2. Android几行代码实现监听微信聊天

    原创作品,转载请注明出处,尊重别人的劳动果实. 2017.2.7更新: *现在适配微信版本更加容易了,只需要替换一个Recourse-ID即可 *可以知道对方发的是小视频还是语音,并获取秒数. *可以 ...

  3. Asp.Net_HttpModule的应用

    IHttpModule向实现类提供模块初始化和处置事件. IHttpModule包含兩個方法: public void Init(HttpApplication context);public voi ...

  4. centos7 RabbitMQ部署

    一.RabbitMQ简单介绍在日常工作环境中,你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务 ...

  5. python中类中属性和方法的具体定义方法和使用

    1. Python中类中特性分成属性和方法 属性和方法都分为私有和公有的,私有的只可以在本类中使用外部是无法访问的 2. 定义属性(成员变量)的语法格式(公有属性/私有属性) class 类名: de ...

  6. 《杜增强讲Unity之Tanks坦克大战》11-游戏流程控制

    11 游戏流程控制 使用协程来控制游戏流程 11.1 添加MessageText 首先添加一个Text来显示文字   image 设置GameMgr   image 11.2 游戏整体流程 下面Gam ...

  7. PAT甲题题解-1011. World Cup Betting (20)-误导人的水题。。。

    题目不严谨啊啊啊啊式子算出来结果是37.975样例输出的是37.98我以为是四舍五入的啊啊啊,所以最后输出的是sum+0.005结果告诉我全部错误啊结果直接保留两位小数就可以了啊啊啊啊 水题也不要这么 ...

  8. webpack简单原理及用法

    前言 如果你已经对Webpack精通了或者至少一直在工作中使用它,请关闭当前浏览器标签,无视这篇文章. 这篇文章本意是写给我自己看的,作为一篇Cookbook供快速查询和上手用.原因是虽然工作中会涉及 ...

  9. PHP学习笔记1

    1.什么是PHP? Hypertext Preprocessor(超文本预处理语言). 是脚本语言. 是最流行的网站开发语言. 2.PHP能做什么? 可以生成动态页面内容. 可以创建.打开.读取.写入 ...

  10. 专业实训题目需求分析(3D推箱子)

    业务需求:    游戏提供主菜单让玩家进行游戏设置.帮助说明,推箱子的小人可以前后左右转动,箱子可以被上下左右的推动,要有关卡设置,障碍物设置,游戏提供背景音乐的功能,要实现3D效果. 面向的用户类型 ...