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,都是以文件的依赖性为基础的,其基本是都 ...
随机推荐
- JS跨浏览器的事件处理
1. 事件流 事件:用户或浏览器自身执行的某种动作.如click(点击事件).mouse***(鼠标事件). 事件流:页面中接收事件的顺序,也可理解为事件在页面中传播的顺序. DOM事件流包括三个阶段 ...
- fis入门-单文件编译之文件优化(optimize)
FIS(Front-end Integrated Solution ),是百度的前端集成解决方案.最近几天在研究前端构建的东西,就顺便了解了下,果断各种高大上,可以到FIS官网围观感受一下.如果对fi ...
- camscanner(扫描全能王)功能解析与复现
早就在用camscanner(扫描全能王)这个软件,感觉很不错. 主要功能: 1.页面截取校正 2.增强处理(灰度与颜色) 刚好最近工作与此相关,静心做点仿真,看看其中的操作原理,也做个demo玩玩. ...
- Ubuntu 18.04下Couldn't connect to Docker daemon at http+docker://localunixsocket解决办法
一台服务器系统为:Ubuntu 18.04 LTS,上面建了git裸仓库,用于开发吧代码push到这里.同时WEB测试环境通过docker也部署在这台.通过git钩子post-receive,当有新代 ...
- 第二次spring冲刺第1天
今天,我们开会讨论了,觉得现阶段的四则运算还不够完善,功能也过于简单,没有太多能吸引人的地方,因次提出以下几点作为后续的修改: 1.计时器,如果具有计时功能,那么就可以增加趣味性. 2.页面跳转,现阶 ...
- WC----命令行实现对文件信息的统计
需求分析: 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c ...
- PHP + webuploader 视频上传
上传方式,PHP默认方式 和 FTP 上传 1.修改PHP 配置: php.ini 修改以下配置项为适合的数据 php中 php.ini 文件修改 file_uploads = On //允许文件上 ...
- [转帖]PG里面的Citus简介----找时间学习一下.
1. Citus是什么 是PostgreSQL的扩展,可以同PG一同安装,之后通过SQL命令加入到数据库中. [相关操作] ? 1 2 #创建Citus扩展: CREATE EXTENSION cit ...
- NGINX.conf配置文件支持pathinfo
# power by www.php.cn #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/e ...
- C++ STL 整理
一.一般介绍 STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Library ...