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,都是以文件的依赖性为基础的,其基本是都 ...
随机推荐
- jqGrid 列内容超过一定长度省略表示
jqgrid初始化方法中的,对应列添加formatter方法 colNames : [ "描述" ], colModel : [ { name : 'description', i ...
- Android几行代码实现监听微信聊天
原创作品,转载请注明出处,尊重别人的劳动果实. 2017.2.7更新: *现在适配微信版本更加容易了,只需要替换一个Recourse-ID即可 *可以知道对方发的是小视频还是语音,并获取秒数. *可以 ...
- Asp.Net_HttpModule的应用
IHttpModule向实现类提供模块初始化和处置事件. IHttpModule包含兩個方法: public void Init(HttpApplication context);public voi ...
- centos7 RabbitMQ部署
一.RabbitMQ简单介绍在日常工作环境中,你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务 ...
- python中类中属性和方法的具体定义方法和使用
1. Python中类中特性分成属性和方法 属性和方法都分为私有和公有的,私有的只可以在本类中使用外部是无法访问的 2. 定义属性(成员变量)的语法格式(公有属性/私有属性) class 类名: de ...
- 《杜增强讲Unity之Tanks坦克大战》11-游戏流程控制
11 游戏流程控制 使用协程来控制游戏流程 11.1 添加MessageText 首先添加一个Text来显示文字 image 设置GameMgr image 11.2 游戏整体流程 下面Gam ...
- PAT甲题题解-1011. World Cup Betting (20)-误导人的水题。。。
题目不严谨啊啊啊啊式子算出来结果是37.975样例输出的是37.98我以为是四舍五入的啊啊啊,所以最后输出的是sum+0.005结果告诉我全部错误啊结果直接保留两位小数就可以了啊啊啊啊 水题也不要这么 ...
- webpack简单原理及用法
前言 如果你已经对Webpack精通了或者至少一直在工作中使用它,请关闭当前浏览器标签,无视这篇文章. 这篇文章本意是写给我自己看的,作为一篇Cookbook供快速查询和上手用.原因是虽然工作中会涉及 ...
- PHP学习笔记1
1.什么是PHP? Hypertext Preprocessor(超文本预处理语言). 是脚本语言. 是最流行的网站开发语言. 2.PHP能做什么? 可以生成动态页面内容. 可以创建.打开.读取.写入 ...
- 专业实训题目需求分析(3D推箱子)
业务需求: 游戏提供主菜单让玩家进行游戏设置.帮助说明,推箱子的小人可以前后左右转动,箱子可以被上下左右的推动,要有关卡设置,障碍物设置,游戏提供背景音乐的功能,要实现3D效果. 面向的用户类型 ...