![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
从头开始写项目Makefile系列
shallnet
一个没赶上脑残一代90后的80后程序猿!
展开
-
从头开始写项目Makefile(二):隐含规则自动推导
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】上一节的Makefile勉强可用,但还写的比较繁琐,不够简洁。对每一个.c源文件,都需要写一个生成其对应的.o目标文件的规则,如果有几百个或上千个源文件,都手动来写,还不是很麻烦,这也不够自动化啊。这样,我们把生成.o目标文件的规则全部删除掉,就是这样一个M原创 2014-07-06 19:31:42 · 5978 阅读 · 0 评论 -
从头开始写项目Makefile(零):前言
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】最近发现我们项目的Makefile不够好,于是着手改了一下,以前Makefile写好后就很少动它了,直接在项目之间拷来拷去直接拿来用,这次重新修改项目Makefile,发现自己又学到不少东西,于是乎决定总结一下记录下来与各位苦逼的程序猿一道分享一下。原创 2014-07-06 19:10:05 · 3436 阅读 · 0 评论 -
从头开始写项目Makefile(十):make内嵌函数及make命令显示
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】 这一节我们讲一下make的函数,在之前的章节已经讲到了几个函数:wildcard、patsubst、notdir、shell等。一般函数的调用格式如下:$(funcname arguments)或$(funcname arguments)原创 2014-07-31 11:34:00 · 4196 阅读 · 2 评论 -
从头开始写项目Makefile(四):伪目标
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】一般情况下,Makefile都会有一个clean目标,用于清除编译过程中产生的二进制文件。我们在第一节的Makefile就用到了这个 clean目标,该目标没有任何依赖文件,并且该目标对应的命令执行后不会生产clean文件。像这种特点目标,它的规则所定义的命原创 2014-07-08 08:50:06 · 3854 阅读 · 0 评论 -
从头开始写项目Makefile(九):目录搜索
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】 在一个较大的工程中,一般会将源代码和二进制文件(.o 文件和可执行文件)安排在不同的目录来进行区分管理。这种情况下,我们可以使用 make 提供的目录搜索依赖文件功能(在指定的若干个目录下自动搜索依赖文件)。在Makefile中,使用依赖文件原创 2014-07-29 11:47:33 · 3045 阅读 · 0 评论 -
从头开始写项目Makefile(六):参数传递、条件判断、include
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】在多个Makefile嵌套调用时,有时我们需要传递一些参数给下一层Makefile。比如我们在顶层Makefile里面定义的打开调试信息变量DEBUG_SYMBOLS,我们希望在进入子目录执行子Makefile时该变量仍然有效,这是需要将该变量传递给子Makef原创 2014-07-10 16:01:45 · 13576 阅读 · 4 评论 -
从头开始写项目Makefile(五):嵌套执行
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】在大一些的项目里面,所有源代码不会只放在同一个目录,一般各个功能模块的源代码都是分开的,各自放在各自目录下,并且头文件和.c源文件也会有各自的目录,这样便于项目代码的维护。这样我们可以在每个功能模块目录下都写一个Makefile,各自Makefile处理各自原创 2014-07-09 11:54:24 · 9844 阅读 · 5 评论 -
从头开始写项目Makefile(一):基本规则
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】一般一个稍大的linux项目会有很多个源文件组成,最终的可执行程序也是由这许多个源文件编译链接而成的。编译是把一个.c或.cpp文件编译成中间代码.o文件,链接是就使用这些中间代码文件生成可执行文件。比如在当前项目目录下有如下源文件:# lscommon.原创 2014-07-06 19:16:54 · 6331 阅读 · 3 评论 -
从头开始写项目Makefile(八):模式规则
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】 上一节讲到目录创建成功,目标文件没有生产到对应目录下,这里我们先给目标文件加上对应目录,这样的话产生对应的目标文件会直接生成到对应目录。我们先给库文件目标和可执行文件目标加上路径,如下:lib : $(OBJDIR) $(LIBDIR)/$(SRC_原创 2014-07-23 21:16:49 · 5634 阅读 · 0 评论 -
从头开始写项目Makefile(七):统一目标输出目录
上一节我们把规则单独提取出来,方便了Makefile的维护,每个模块只需要给出关于自己的一些变量,然后再使用统一的规则Makefile。这一节我们继续改进我们的Makefile,到目前为止我们的Makefile编译链接输出的目标都在源文件同目录下或模块Makefile同一目录下,当一个项目大了之后,这样会显得很乱,寻找编译输出的文件也比较困难。既然Makefile本身就是按照我们的的规则来编译链接原创 2014-07-22 20:45:51 · 7382 阅读 · 3 评论 -
从头开始写项目Makefile(三):变量的使用
仔细研究我们的之前Makefile发现,我们还有改进的地方,就是此处:target_bin : main.o debug.o ipc.o timer.o tools.o>---gcc -o target_bin main.o debug.o ipc.o timer.o tools.o如果增加一个源文件xx.c的话,需要在两处或多处增加xx.o文件。我们可以使用变量来解决这个问题。之前说原创 2014-07-07 19:01:53 · 5129 阅读 · 0 评论