-
如何写Makefile
2019-10-06 00:28:32如何写Makefile 《如何写Makefile》,作者:jenimils,原文链接:http://www.cnblogs.com/L-hq815/archive/2012/11/22/2783188.html 分享自:博客园Android客户端(http://an...《如何写Makefile》,作者:jenimils,原文链接:http://www.cnblogs.com/L-hq815/archive/2012/11/22/2783188.html 分享自:博客园Android客户端(http://android.walkingp.com/cnblogs/)转载于:https://www.cnblogs.com/lexus/archive/2012/11/28/2791916.html
-
如何写makefile
2017-03-29 10:29:00精华帖,如何写makefile http://www.chinaunix.net/old_jh/23/408225.html 转载于:https://www.cnblogs.com/Crysaty/p/6638371.html精华帖,如何写makefile
http://www.chinaunix.net/old_jh/23/408225.html
转载于:https://www.cnblogs.com/Crysaty/p/6638371.html
-
教你如何写makefile
2018-12-07 15:00:12本文档教你如何写makefile,很适合入门。内容非常详细 -
认识及如何写Makefile?
2017-04-10 20:53:55认识及如何写Makefile?会不会写Makefile,侧面说明了一个人是否具备完成大型工程的能力。任何一种技能或知识都是源之于某种社会需求,那为什么要用Makefile呢?
当项目源文件很少的时候,我们也许还可以手动使用gcc命令来进行编译,但是当项目发展到一个庞大的规模时,再手动敲gcc命令去编译就变得不可能的事情。所以呢,在这样的历史背景下,就出现了某个大牛(斯图亚特·费尔德曼),在某年(1977年)在某地(贝尔实验室)制作了这样一个软件,它的名字就叫做make。
用一句话来说明为什么用Makefile:为了实现自动化(当然大多数场景都是用在自动化编译中)。
另外在编译过程中,为了节省时间,希望仅编译修改过的文件,这也是Makefile在设计时一个重要的设计观点。
那么我们今天就来认识一下makefile及如何写一个最基本的Makefilemakefile是文本文件
make是与之对应的命令,可以自动化构建工程
make依赖于Makefile。
Makefile 有依赖方法和依赖关系(相互依赖,缺一不可)
在Makefile如何描述依赖关系呢?
比如你依赖你的父母,那么你与父母的依赖关系应写成:
你:父母
那么,在Makefile就按照如下方法描述依赖方法:
目标文件(你) :依赖文件列表(父母)
Makefile的核心是描述依赖方法和依赖关系
接下来我们就来看看如何写一个基本的Makefile!
首先建立一个叫mk的目录,进入目录。创建一个test.c文件
进入test.c编写一个简单的小程序(如下图所示)
保存并退出vim编译器,然后创建一个Makefile文件。
接着我们输入vim Makefile指令开始写一个简单的Makefile(如下图所示)
1、一个Makefile中必须写依赖方法与依赖关系, 依赖方法必须紧挨依赖关系 并以tab键开始
注意:clean是没有依赖关系的,所以只写“clean:” 即可
2、.PHONY是一个清理工程
被“.PHONY:” 修饰的字符串叫做伪目标,伪目标不会产生文件。
到这里我们就写完了一个最基本的Makefile,接下来让我们来运行一下,输入make指令即可产生一个叫test的文件,编译运行test即可得到程序结果。
当然了,如果我们想要删除要怎么呢?因为在刚才的Makefile文件中我们已经写入了clean功能,我们输入指令“make clean”,就可以成功删除test文件。
再次输入指令make就可以重新产生test文件啦!!
还有一点!在写 Makefile的内容时如果你想添加注释的时候,在文本前加入#即可(如图所示)
好啦!关于Makefile我们今天就说到这里。嘿嘿,你学会如何写Makefile了吗?
-
如何写 makefile文件
2009-05-19 13:43:00下面以问答的形式来解释如何写makefile文件. 1.makefile的核心: target...(目标文件|object文件|可执行文件|标签) : prerequisites( 生成target所需要的文件,也可以是target中的一种...) Command (shell 命令) ...如何写 makefile文件
学习别人的程序就面临着重写makefile的问题.下面以问答的形式来解释如何写makefile文件.
1.makefile的核心:
target...(目标文件|object文件|可执行文件|标签) : prerequisites( 生成target所需要的文件,也可以是target中的一种...)
Command (shell 命令)
target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。prerequisites中如果有一个以上的文件比target文件更新的话,command所定义的命令就会执行。
2.make 的工作原理:
例, 文件名:makefiletest
test : test.o
gcc -o test test.o
test.o: test.h test.c
gcc -c test.c
clean:
rm test.o test
在默认方式下,只输入make命令。其会做如下工作:
make会在当前目录下找名字为“Makefile文件”或“makefile文件”的文件。如果找到,它会找文件中的第一个目标文件(target)。在上面的例子中,它会找到makefiletest这个文件,并把test作为最终的目标文件;如果test文件不存在,或是test所依赖的后面的 .o 文件的修改时间要比test这个文件新,它就会执行后面所定义的命令来生成test文件。
如果test所依赖的.o文件也存在,make会在当前文件中找目标为.o文件的依赖性,如果找到,则会根据规则生成.o文件(这有点像一个堆栈的过程)。
当然,C文件和H文件如果存在,make会生成 .o 文件,然后再用 .o 文件生成make的最终结果,也就是执行文件test。
这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,make就会直接退出,并报错。而对于所定义的命令的错误,或是编译不成功,make就不会处理。如果在make找到了依赖关系之后,冒号后面的文件不存在,make仍不工作
通过上述分析,可以看出像clean这样没有被第一个目标文件直接或间接关联时,它后面所定义的命令将不会被自动执行,不过,可以显式使make执行。即使用命令make clean,以此来清除所有的目标文件,并重新编译。
在编程中,如果这个工程已被编译过了,当修改了其中一个源文件时,比如test.c,根据依赖性,目标test.o会被重新编译(也就是在这个依赖性关系后面所定义的命令),则test.o文件也是最新的,即test.o文件的修改时间要比test要新,所以test也会被重新连接了。
3 定义变量:
ltest=test.h test.c
上面的makefiletest可以改写为:
test : test.o
gcc -o test test.o
test.o: $(ltest)
gcc -c test.c
clean:
rm test.o test
4 makefile文件的自动推导
test : test.o
gcc -o test test.o
test.o: test.h
clean:
rm test.o test
看一下test.o这个target,省略了 prerequisites的 test.c和command的gcc -c test.c,这些是target为test.o能推导出来的.
5 清空目标文件
.PHONY : clean
clean :
-rm test.o test
前面说过,.PHONY表示clean是一个“伪目标”,而在rm命令前面加了一个小减号的目的是,如果某些文 件出现问题将被忽略,继续进行后面的操作。当然,clean的规则不要放在文件的开头,否则会变成make的 默认目标。不成文的规矩是“clean从来都放在文件的最后”
6.注释:
#. 为行注释,与//类似
7.显示指定makefile文件名
将makefiletest改为make.test
make -f make.test
8.TAB键
为command命令的识别键,在command头使用,最好不要用在其它地方
9.包含 其它 makefile文件
include <filename>
filename可以是当前操作系统Shell的文件模式(可以保含路径和通配符)。在include前面可以有一些空字符,但是绝不能以[Tab]键开始。include和<filename>可以用一个或多个空格隔开。举个例子,有这样几个makefile文件:a.mk、b.mk、c.mk,还有一个文件叫foo.make,以及一个变量$(bar),其包含了e.mk和f.mk,下面的语句:
include foo.make *.mk $(bar)
等价于:
include foo.make a.mk b.mk c.mk e.mk f.mk
10 -include和sinclude 都可以ignore error,
11. make的工作顺序
(1) 读入所有的makefile文件。
(2) 读入被include包括的其他makefile文件。
(3) 初始化文件中的变量。
(4) 推导隐式规则,并分析所有规则。
(5) 为所有的目标文件创建依赖关系链。
(6) 根据依赖关系,决定哪些目标要重新生成。
(7) 执行生成命令。
12.转义字符与通配符
/
*,?,[...],~
其它请参见用户手册.
-
学习如何写Makefile
2018-10-10 11:14:56转载方便自己随时学习,随时查询,感谢原创大神的辛苦付出和无私奉献...或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile... -
让你快速学习如何写makefile,《跟我一起学习写makefile》
2014-09-10 14:35:40比较系统的描述了makefile的写法,可以让你你在最短的时间内了解并自己撰写makefile -
makefile 指定include_如何写makefile?
2020-11-10 18:37:12以c语言为例子,我们的程序源文件需要经过编译,生成object...在Linux系统下,这个过程需要我们手动实现在windows下的IDE完成了makefile的工作。但是在linux,unix下编译就离不开makefile。makefile关系到整个工程的... -
手把手教你如何写Makefile
2010-01-22 13:27:00手把手教你如何写Makefile一、Makefile的规则在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。target ... : prerequisites ...command......target也就是一个目标文件,可以是Object F
-
23设计模式-适配器模式
-
OC.Gen-X.2.9.2.dmg
-
2021-02-28
-
整合营销传播系统.pdf
-
基于PHP+MYSQL的成绩查询系统(含源码)
-
SQL入门基本概念
-
MySQL 高可用(DRBD + heartbeat)
-
【考研初试】安徽建筑大学702公共管理学考研真题库资料
-
各种显示器色域测试软件和计算显示器色域值软件和表格
-
基于SSM实现的房屋租赁系统【附源码】(毕设)
-
摄影测量之空间后方交会程序.zip
-
微信支付 api v3 支付通知 异步 验签失败 PHP
-
_(:з」∠)_萌新弱弱的混个积分
-
认识registerActivityLifecycleCallbacks
-
vscode连接远程服务器显示could not establish connect,解决步骤
-
Mysql数据库面试直通车
-
STL 容器的常用操作(未完成)
-
a2a-ip-trust-ip-configuration:用于访问IP音频信任组件的OpenShift构建和部署配置-源码
-
通过C#获取Select下拉列表的Value或Text值的方法
-
Algorithm_BaekJoon:백준리즘제문-源码