- 浏览: 1525028 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
<!-- --><!-- --> <!-- -->
六、另类风格的makefile
即然我们的make
可以自动推导命令,那么我看到那堆[.o]
和[.h]
的依赖就有点不爽,那
么多的重复的[.h]
,能不能把其收拢起来,好吧,没有问题,这个对于make
来说很容
易,谁叫它提供了自动推导命令和文件的功能呢?来看看最新风格的makefile
吧。
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
$(objects) : defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h
.PHONY : clean
clean :
rm edit $(objects)
这种风格,让我们的makefile
变得很简单,但我们的文件依赖关系就显得有点凌乱了。
鱼和熊掌不可兼得。还看你的喜好了。我是不喜欢这种风格的,一是文件的依赖关系看
不清楚,二是如果文件一多,要加入几个新的.o
文件,那就理不清楚了。
七、清空目标文件的规则
每个Makefile
中都应该写一个清空目标文件(.o
和执行文件)的规则,这不仅便于重
编译,也很利于保持文件的清洁。这是一个“
修养”
(呵呵,还记得我的《编程修养》
吗)。一般的风格都是:
clean:
rm edit $(objects)
更为稳健的做法是:
.PHONY : clean
clean :
-rm edit $(objects)
前面说过,.PHONY
意思表示clean
是一个“
伪目标”
,。而在rm
命令前面加了一个小
减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。当然,clean
的规则不要放在文件的开头,不然,这就会变成make
的默认目标,相信谁也不愿意这
样。不成文的规矩是——“clean
从来都是放在文件的最后”
。
上面就是一个makefile
的概貌,也是makefile
的基础,下面还有很多makefile
的相关
细节,准备好了吗?准备好了就来。
Makefile
总述
———————
一、Makefile
里有什么?
Makefile
里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。
1
、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由 Makefile
的书
写者明显指出,要生成的文件,文件的依赖文件,生成的命令。
2
、隐晦规则。由于我们的 make
有自动推导的功能,所以隐晦的规则可以让我们比较粗
糙地简略地书写Makefile
,这是由make
所支持的。
3
、变量的定义。在 Makefile
中我们要定义一系列的变量,变量一般都是字符串,这个有
点你C
语言中的宏,当Makefile
被执行时,其中的变量都会被扩展到相应的引用位置
上。
4
、文件指示。其包括了三个部分,一个是在一个 Makefile
中引用另一个 Makefile
,就像
C
语言中的 include
一样;另一个是指根据某些情况指定
Makefile
中的有效部分,就像
C
语言中的预编译#if
一样;还有就是定义一个多行的命令。有关这一部分的内容,我
会在后续的部分中讲述。
5
、注释。Makefile
中只有行注释,和 UNIX
的 Shell
脚本一样,其注释是用“#”
字符,这
个就像C/C++
中的“//”
一样。如果你要在你的Makefile
中使用“#”
字符,可以用反斜框
进行转义,如:“\#”
。
最后,还值得一提的是,在Makefile
中的命令,必须要以[Tab]
键开始。
二、Makefile 的文件名
默 认 的 情 况 下 , make
命 令 会 在 当 前 目 录 下 按 顺 序 找 寻 文
件 名 为
“GNUmakefile”
、“makefile”
、“Makefile”
的文件,找到了解释这个文件。在这三个文件
名中,最好使用“Makefile”
这个文件名,因为,这个文件名第一个字符为大写,这样
有一种显目的感觉。最好不要用“GNUmakefile”
,这个文件是GNU
的make
识别的。有
另外一些make
只对全小写的“makefile”
文件名敏感,但是基本上来说,大多数的
make
都支持“makefile”
和“Makefile”
这两种默认文件名。
当 然 , 你 可 以 使 用 别 的 文 件 名 来 书 写 Makefile
, 比 如 :
“Make.Linux”
,“Make.Solaris”
,“Make.AIX”
等,如果要指定特定的Makefile
,你
可以使用 make
的“-f”
和“--file”
参数,如:make -f Make.Linux
或 make --file
Make.AIX
。
三、引用其它的Makefile
在 Makefile
使用 include
关键字可以把别的 Makefile
包含进来,这很像 C
语言的
#include
,被包含的文件会原模原样的放在当前文件的包含位置。include
的语法是:
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
make
命令开始时,会把找寻 include
所指出的其它
Makefile
,并把其内容安置在当前的
位置。就好像C/C++
的#include
指令一样。如果文件都没有指定绝对路径或是相对路径的
话,make
会在当前目录下首先寻找,如果当前目录下没有找到,那么,make
还会在
下面的几个目录下找:
1
、如果 make
执行时,有“-I”
或“--include-dir”
参数,那么 make
就会在这个参数所指
定的目录下去寻找。
2
、如果目录<prefix>/include
(一般是:/usr/local/bin
或/usr/include
)存在的话,make
也
会去找。
如果有文件没有找到的话,make
会生成一条警告信息,但不会马上出现致命错误。它
会继续载入其它的文件,一旦完成makefile
的读取,make
会再重试这些没有找到,或
是不能读取的文件,如果还是不行,make
才会出现一条致命信息。如果你想让make
不
理那些无法读取的文件,而继续执行,你可以在include
前加一个减号“-”
。如:
-include <filename>
其表示,无论include
过程中出现什么错误,都不要报错继续执行。和其它版本make
兼
容的相关命令是sinclude
,其作用和这一个是一样的。
四、环境变量MAKEFILES
如果你的当前环境中定义了环境变量MAKEFILES
,那么,make
会把这个变量中的值
做一个类似于include
的动作。这个变量中的值是其它的Makefile
,用空格分隔。只是,
它和include
不同的是,从这个环境变中引入的Makefile
的“
目标”
不会起作用,如果
环境变量中定义的文件发现错误,make
也会不理。
但是在这里我还是建议不要使用这个环境变量,因为只要这个变量一被定义,那么当
你使用make
时,所有的Makefile
都会受到它的影响,这绝不是你想看到的。在这里提
这个事,只是为了告诉大家,也许有时候你的Makefile
出现了怪事,那么你可以看看
当前环境中有没有定义这个变量。
五、make 的工作方式
GNU
的 make
工作时的执行步骤入下:(想来其它的
make
也是类似)
1
、读入所有的 Makefile
。
2
、读入被 include
的其它 Makefile
。
3
、初始化文件中的变量。
4
、推导隐晦规则,并分析所有规则。
5
、为所有的目标文件创建依赖关系链。
6
、根据依赖关系,决定哪些目标要重新生成。
7
、执行生成命令。
1-5
步为第一个阶段,6-7
为第二个阶段。第一个阶段中,如果定义的变量被使用了,那
么,make
会把其展开在使用的位置。但make
并不会完全马上展开,make
使用的是拖
延战术,如果变量出现在依赖关系的规则中,那么仅当这条依赖被决定要使用了,变
量才会在其内部展开。
当然,这个工作方式你不一定要清楚,但是知道这个方式你也会对make
更为熟悉。有
了这个基础,后续部分也就容易看懂了。
书写规则
————
规则包含两个部分,一个是依赖关系,一个是生成目标的方法。
在Makefile
中,规则的顺序是很重要的,因为,Makefile
中只应该有一个最终目标,
其它的目标都是被这个目标所连带出来的,所以一定要让make
知道你的最终目标是什
么。一般来说,定义在Makefile
中的目标可能会有很多,但是第一条规则中的目标将被
确立为最终的目标。如果第一条规则中的目标有很多个,那么,第一个目标会成为最终
的目标。make
所完成的也就是这个目标。
好了,还是让我们来看一看如何书写规则。
一、规则举例
foo.o : foo.c defs.h # foo
模块
cc -c -g foo.c
看到这个例子,各位应该不是很陌生了,前面也已说过,foo.o
是我们的目标,foo.c
和
defs.h
是目标所依赖的源文件,而只有一个命令“cc -c -g foo.c”
(以 Tab
键开头)。这
个规则告诉我们两件事:
1
、文件的依赖关系,foo.o
依赖于 foo.c
和 defs.h
的文件,如果 foo.c
和 defs.h
的文件日
期要比foo.o
文件日期要新,或是foo.o
不存在,那么依赖关系发生。
2
、如果生成(或更新)foo.o
文件。也就是那个 cc
命令,其说明了,如何生成 foo.o
这个
文件。(当然foo.c
文件include
了defs.h
文件)
二、规则的语法
targets : prerequisites
command
...
或是这样:
targets : prerequisites ; command
command
...
targets
是文件名,以空格分开,可以使用通配符。一般来说,我们的目标基本上是一个
文件,但也有可能是多个文件。
command
是命令行,如果其不与“target
rerequisites”
在一行,那么,必须以[Tab
键]
开头,如果和prerequisites 在一行,那么可以用分号做为分隔。(见上)
prerequisites
也就是目标所依赖的文件(或依赖目标)。如果其中的某个文件要比目标
文件要新,那么,目标就被认为是“
过时的”
,被认为是需要重生成的。这个在前面已
经讲过了。
如果命令太长,你可以使用反斜框(‘\’
)作为换行符。make
对一行上有多少个字符没
有限制。规则告诉make
两件事,文件的依赖关系和如何成成目标文件。
一般来说,make
会以UNIX
的标准Shell
,也就是/bin/sh
来执行命令。
三、在规则中使用通配符
如果我们想定义一系列比较类似的文件,我们很自然地就想起使用通配符。make
支持
三各通配符:“*”
,“?”
和“[...]”
。这是和Unix
的B-Shell
是相同的。
波浪号(“~”
)字符在文件名中也有比较特殊的用途。如果是“~/test”
,这就表示当前
用户的$HOME
目录下的test
目录。而“~hchen/test”
则表示用户hchen
的宿主目录下的
test
目录。(这些都是 Unix
下的小知识了,make
也支持)而在 Windows
或是 MS-DOS
下,用户没有宿主目录,那么波浪号所指的目录则根据环境变量“HOME”
而定。
通配符代替了你一系列的文件,如“*.c”
表示所以后缀为c
的文件。一个需要我们注意
的是,如果我们的文件名中有通配符,如:“*”
,那么可以用转义字符“\”
,如“\*”
来表示真实的“*”
字符,而不是任意长度的字符串。
好吧,还是先来看几个例子吧:
clean:
rm -f *.o
上面这个例子我不不多说了,这是操作系统Shell
所支持的通配符。这是在命令中的通
配符。
print: *.c
lpr -p $?
touch print
上面这个例子说明了通配符也可以在我们的规则中,目标print
依赖于所有的[.c]
文件。
其中的“$?”
是一个自动化变量,我会在后面给你讲述。
objects = *.o
上面这个例子,表示了,通符同样可以用在变量中。并不是说[*.o]
会展开,不!objects
的值就是“*.o”
。Makefile
中的变量其实就是C/C++
中的宏。如果你要让通配符在变量中
展开,也就是让objects
的值是所有[.o]
的文件名的集合,那么,你可以这样:
objects := $(wildcard *.o)
这种用法由关键字“wildcard”
指出,关于Makefile
的关键字,我们将在后面讨论。
四、文件搜寻
在一些大的工程中,有大量的源文件,我们通常的做法是把这许多的源文件分类,并
存放在不同的目录中。所以,当make
需要去找寻文件的依赖关系时,你可以在文件前
加上路径,但最好的方法是把一个路径告诉make
,让make
在自动去找。
Makefile
文件中的特殊变量“VPATH”
就是完成这个功能的,如果没有指明这个变量,
make
只会在当前的目录中去找寻依赖文件和目标文件。如果定义了这个变量,那么,
make
就会在当当前目录找不到的情况下,到所指定的目录中去找寻文件了。
VPATH = src:../headers
上面的的定义指定两个目录,“src”
和“../headers”
,make
会按照这个顺序进行搜索。
目录由“
冒号”
分隔。(当然,当前目录永远是最高优先搜索的地方)
另一个设置文件搜索路径的方法是使用make
的“vpath”
关键字(注意,它是全小写
的),这不是变量,这是一个make
的关键字,这和上面提到的那个VPATH
变量很类
似,但是它更为灵活。它可以指定不同的文件在不同的搜索目录中。这是一个很灵活的
功能。它的使用方法有三种:
1
、vpath <pattern> <directories>
为符合模式<pattern>
的文件指定搜索目录<directories>
。
2
、vpath <pattern>
清除符合模式<pattern>
的文件的搜索目录。
3
、vpath
清除所有已被设置好了的文件搜索目录。
vapth
使用方法中的<pattern>
需要包含“%”
字符。“%”
的意思是匹配零或若干字符,例
如,“%.h”
表示所有以“.h”
结尾的文件。<pattern>
指定了要搜索的文件集,而
<directories>
则指定了<pattern>
的文件集的搜索的目录。例如:
vpath %.h ../headers
该语句表示,要求make
在“../headers”
目录下搜索所有以“.h”
结尾的文件。(如果某文
件在当前目录没有找到的话)
我们可以连续地使用vpath
语句,以指定不同搜索策略。如果连续的vpath
语句中出现
了相同的<pattern>
,或是被重复了的<pattern>
,那么,make
会按照vpath
语句的先后
顺序来执行搜索。如:
vpath %.c foo
vpath % blish
vpath %.c bar
其表示“.c”
结尾的文件,先在“foo”
目录,然后是“blish”
,最后是“bar”
目录。
vpath %.c foo:bar
vpath % blish
而上面的语句则表示“.c”
结尾的文件,先在“foo”
目录,然后是“bar”
目录,最后才
是“blish”
目录。
五、伪目标
最早先的一个例子中,我们提到过一个“clean”
的目标,这是一个“
伪目标”
,
clean:
rm *.o temp
正像我们前面例子中的“clean”
一样,即然我们生成了许多文件编译文件,我们也应该
提供一个清除它们的“
目标”
以备完整地重编译而用。(以“makeclean”
来使用该目
标)
因为,我们并不生成“clean”
这个文件。“
伪目标”
并不是一个文件,只是一个标签,
由于“
伪目标”
不是文件,所以make
无法生成它的依赖关系和决定它是否要执行。我
们只有通过显示地指明这个“
目标”
才能让其生效。当然,“
伪目标”
的取名不能和文
件名重名,不然其就失去了“
伪目标”
的意义了。
当然,为了避免和文件重名的这种情况,我们可以使用一个特殊的标记“.PHONY”
来
显示地指明一个目标是“
伪目标”
,向make
说明,不管是否有这个文件,这个目标就
是“
伪目标”
。
.PHONY : clean
只要有这个声明,不管是否有“clean”
文件,要运行“clean”
这个目标,只有“make
clean”
这样。于是整个过程可以这样写:
.PHONY: clean
clean:
rm *.o temp
伪目标一般没有依赖的文件。但是,我们也可以为伪目标指定所依赖的文件。伪目标同
样可以作为“
默认目标”
,只要将其放在第一个。一个示例就是,如果你的Makefile
需
要一口气生成若干个可执行文件,但你只想简单地敲一个make
完事,并且,所有的目
标文件都写在一个Makefile
中,那么你可以使用“
伪目标”
这个特性:
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
我们知道,Makefile
中的第一个目标会被作为其默认目标。我们声明了一个“all”
的伪
目标,其依赖于其它三个目标。由于伪目标的特性是,总是被执行的,所以其依赖的那
三个目标就总是不如“all”
这个目标新。所以,其它三个目标的规则总是会被决议。也就
达到了我们一口气生成多个目标的目的。“.PHONY:all”
声明了“all”
这个目标为“
伪
目标”
。
随便提一句,从上面的例子我们可以看出,目标也可以成为依赖。所以,伪目标同样也
可成为依赖。看下面的例子:
.PHONY: cleanall cleanobj cleandiff
cleanall : cleanobj cleandiff
rm program
cleanobj :
rm *.o
cleandiff :
rm *.diff
“make clean”
将清除所有要被清除的文件。“cleanobj”
和“cleandiff”
这两个伪目标有点
像“
子程序”
的意思。我们可以输入“make cleanall”
和“make cleanobj”
和“make
cleandiff”
命令来达到清除不同种类文件的目的。
发表评论
-
数据结构与算法分析(C语言描述)源代码与答案
2009-12-14 11:44 6715数据结构与算法分析(C语言描述)(第二版) Mark A ... -
A new Michael Jackson song
2009-10-12 16:48 949<!-- [if gte mso 9]><x ... -
makefile 大全
2009-02-24 07:37 1180http://chenl.blogbus.com/logs ... -
Linux_Unix环境下的Make和Makefile详解
2009-02-24 07:35 1320无论是在 Linux 还是在 U ... -
C++的11个注意要点
2009-02-24 07:33 1030C++ 的 11 个注意要点 ... -
运用autoconf和automake自动生成Makefile实例讲解
2009-02-24 07:30 4068运用 autoconf 和 automake ... -
makefile详解(6)
2009-02-24 07:23 1784makefile 详解( 6 ) ... -
makefile详解(5)
2009-02-24 07:22 1675<!-- --><!-- -->& ... -
makefile详解(4)
2009-02-24 07:21 1423<!-- --><!-- -->& ... -
makefile详解(3)
2009-02-24 07:20 1637<!-- --><!-- --> & ... -
makefile详解(1)
2009-02-24 07:18 1505makefile 详解 ... -
VC++动态链接库(DLL)编程深入浅出(二) Win32 Dynamic-Link Library
2008-08-19 14:23 8025上节给大家介绍了静态链接库与库的调试与查看( 动态链 ... -
VC++动态链接库(DLL)编程深入浅出(一) Win32 Static Library
2008-08-19 14:13 7115http://www.pconline.com.cn/pced ... -
VC++常用数据类型及其操作详解
2008-08-18 23:43 1384http://blog.csdn.net/flxyzsby/a ... -
VC++数据类型转换大全
2008-08-18 23:25 64099int i = 100; long l = 2001; f ... -
DLL导出变量
2008-08-18 16:20 2071DLL定义的全局变量可以被调用进程访问;DLL也可以访问调用进 ... -
DLL导出类
2008-08-18 16:20 2628DLL中定义的类可以在应用工程中使用。 下面的例子里,我 ... -
MFC规则DLL 概述
2008-08-18 16:19 2823MFC规则DLL的概念体现在两方面: (1) 它是MFC ... -
MFC规则DLL的创建
2008-08-18 16:18 1853我们来一步步讲述使用MFC向导创建MFC规则DLL的过程,首先 ... -
MFC规则DLL 简单的例子
2008-08-18 16:16 3960这个DLL的例子(属于静态链接到MFC 的规则DLL)中提供了 ...
相关推荐
这个压缩包包含了“Makefile详解.pdf”和“GNU_Make_3.80_cn.pdf”两份文档,旨在帮助用户深入理解Makefile的原理和使用方法。 首先,让我们详细了解Makefile的核心概念。Makefile是一个文本文件,其中包含了规则...
### Makefile详解 #### 一、Makefile概览与重要性 Makefile 是一种用于自动化构建过程的脚本文件,在 Linux 和 Unix 环境中非常常见。它可以帮助开发者高效管理项目的编译流程,尤其在处理大型项目时,能够极大地...
### makefile详解 #### 一、makefile的重要性与作用 在软件开发过程中,makefile扮演着极其重要的角色,尤其在大型项目的构建管理方面。对于Windows程序员来说,由于集成开发环境(IDE)通常提供了完整的项目管理和...
### U-Boot 1.1.6顶层Makefile详解 U-Boot(Universal Boot Loader)是一种广泛应用于嵌入式系统的启动加载程序。它支持多种处理器架构,并具备丰富的功能特性,如网络启动、串口控制台等。对于U-Boot源码的理解与...
### Make和Makefile详解 #### 一、Make和Makefile概览 **Make** 是一个命令行工具,用于处理 **Makefile** 文件中定义的任务。Makefile 是一种文本文件,其中包含了编译程序所需的指令集,它告诉 make 如何构建...
Makefile详解——从入门到精通 Makefile是软件构建过程中的一个重要工具,它定义了项目的构建规则、目标和依赖关系,使得编译和链接过程能够自动化进行。掌握Makefile的编写和使用对于任何编程人员,尤其是嵌入式...
在这篇文档中,将重点介绍GNU的make,它在Unix系统中被广泛使用,并且遵循IEEE POSIX.2标准。 程序的编译和链接是两个不同的过程。编译是将源代码文件转换成中间代码文件,即在Windows中生成.obj文件,在Unix中生成...
### U-Boot中Makefile详解 #### 一、引言 U-Boot(Universal Boot Loader)是一个开源项目,用于各种嵌入式系统平台上的启动加载程序。它支持多种处理器架构,如ARM、PowerPC等,并且能够适应各种硬件平台的需求。...
### Linux/Unix环境下的Make和Makefile详解 #### 一、Make工具简介 在Linux或Unix环境下,Make是一个极其重要的工具,广泛应用于项目开发和软件安装过程中。它可以帮助开发者高效地管理和编译复杂的项目,尤其是当...
Linux&Unix环境下的make和makefile详解 (文章来自cu 原作者xzh2002).doc
2. **kbuild架构**:kbuild由一系列的Makefile组成,包括顶级的`Makefile`、`Rules.make`、`Kbuild`等,以及每个子目录中的`Kconfig`和`Makefile`。`Kconfig`用于配置内核选项,而`Makefile`则定义了如何构建目标。 ...
"LINUX2.6内核makefile详解" Linux 2.6 内核 Makefile 详解是 Linux 内核开发中非常重要的一部分。Makefile 是一个脚本文件,用于描述如何编译和构建 Linux 内核。该文件是 Linux 内核开发的核心组件之一,对开发...
Makefile 详解中文版 Makefile 是一种自动构建工具,广泛应用于 Unix 和 Linux 系统中。GNU Make 是一个功能强大且广泛使用的 Make 实现,提供了详细的文档和手册。下面是 Makefile 的详细解释: Make 概述 Make...
### makefile详解:掌握自动化构建的关键 在软件开发领域,特别是在Unix系统环境下,makefile扮演着举足轻重的角色。makefile是一种用于自动化构建过程的脚本,它定义了源代码文件之间的依赖关系以及编译规则,使得...
03天-makefile详解
Makefile 详解 Makefile 是一个工程的编译规则定义文件,它告诉 make 命令如何编译和链接文件。Makefile 的作用是自动完成编译工作的规则,包括隐晦规则和显式规则。Makefile 的主要内容包括:显式规则、隐晦规则、...
GNU Make 的主要工作是读进一个文本文件, makefile 。这个文件里主要是有关哪些文件 (‘target’目的文件)是从哪些别的 文件(‘dependencies’依靠文件)中产 生的,用什么命令 来进行 这个产生过程。 gcc/g++...