来自 关于计算机 2019-10-19 01:11 的文章
当前位置: 六合联盟网 > 关于计算机 > 正文

Linux基础教程

现陈述Linux认证考试中涉及到的makefile和make准则:

GNU Make

首先介绍make实用程序的语法和常用选项,然后细剖makefile文件的整合。

make是承受从种类的源代码中变化最终可实施文件和另外非源代码文件的工具。 make命令本人可含蓄多样参数:标识、宏定义、描述文件名和对象文件名。

make命令

其专门的学业情势为:make [flags] [macro definitions] [targets]

make [选项] [目标] [宏定义]

Unix系统下标识位flags选项及其含义为:
-f file 钦命file文件为描述文件,假设 file参数为 '-' 符,那么描述文件指向标准输入。如果未有 '-f' 参数,则系统将默许当前目录下名字为makefile可能名字为Makefile的公文为描述文件。在Linux中, GNU make 工具在当前职业目录中固守GNUmakefile、makefile、Makefile的顺序寻觅makefile文件。
-i 忽视命令推行回来的失误新闻。
-s 沉默格局,在执行以前不出口相应的命令行音讯。
-r 禁用带有准则。

经过命令行参数中的target,可钦定make要编写翻译的靶子,并且同意同有的时候候定义编写翻译两个指标,操作时根据从左向右的逐条依次编写翻译target选项中钦点的靶子文件。假设命令行中未有点名指标,则系统默许target指向描述文件中率先个指标文件。

-n 非举行方式,输出全数实施命令,但并不推行。
-t 更新目的文件。
-q make操作将依照目的文件是或不是早就更新再次来到"0"或非"0"的情状音讯。
-p 输出全部宏定义和目标文件汇报。
-d Debug模式,输出有关文件和检测时间的详细音讯。

-d 彰显调节和测量检验音讯

Linux下make标记位的常用选项与Unix系统中稍有两样,上面只列出了分歧部分:
-c dir 在读取 makefile 以前更改到钦命的目录dir。
-I dir 当包涵其余 makefile文件时,利用该选项内定搜索目录。
-h help文挡,展现全部的make选项。
-w 在拍卖 makefile 在此以前和现在,都显得职业目录。
透过命令行参数中的target ,可钦命make要编写翻译的对象,並且同意同期定义编译多个对象,操作时根据从左向右的一一依次编写翻译target选项中内定的对象文件。如若命令行中未有一点点名指标,则系统私下认可target指向描述文件中第三个对象文件。

-n 不运维任何makefile文件,只打字与印刷须要进行的命令

2.1 make macro definitions

-p 输出全部宏定义和指标文件陈述

makefile如下:

-s 静止状态下运维,不突显别的命令行音讯

  LIBES= -LS

-f file 通知make程序从file中读取内部信任表明,缺省状态下会读取makefile或许Makefile文件处理,文件名-表示读取标准输入,在Linux中,GNU make工具在当前专门的工作目录中依照GNUmakefile、makefile、Makefile的相继寻找makefile文件

# use macros rewrite makefile ..

介怀:在源文件并未有被修改的情状下,运维make命令会生成一条消息,说源文件的可执行文件是风靡的,无需用make命令重新编写翻译和链接。要强制再创制可施行代码,供给退换源文件的上次更新时间,能够动用touch命令,然后再度运维make命令。

prog: $(OBJECTS)

touch [选项] 文件或目录

cc $(OBJECTS) $(LIBES) -o prog

-r 文件或目录 把钦赐文件或目录的日期时间,设成和参照文件或目录的日辰时间千篇一律

此时借使试行不带参数的make命令,将接连几个对象文书档案和库文书档案LS;但是假如在make命令后含有新的宏定义:

-d 日期时间 使用钦命的日期时间,而非以往的年华

make "LIBES= -LL -LS"

makefile规则

命令行前面包车型大巴宏定义将覆盖makefile文书档案中的宏定义。若LL也是库文书档案,此时make命令将接连七个目的文书档案连同七个库文书档案LS和LL。

make程序基于文件之间的正视,必要创立的对象文件,以至创建目的文件时要实践的指令,以上全数被称为规则,存放在文书makefile中。定制准则的语法如下:

 make local_all  "SW=SWM_DEBUG"

对象列表 : 关联性列表

2.2  追加宏定义

《TAB》命令列表

c file:

注意:

#ifdef  SWM_DEBUG
Tracker->Debug( "%s:%d:%s, none do  iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxiiiiiiiiiiiiiiiiiiiiiiin",__FILE__, __LINE__,__FUNCTION__ );
#endif

1.得以在关联性列表和指令列表中利用shell文件超级模特式相称字符,比方?、*、[]等等。

Makefile file:

2.一旦目的的吩咐列表中某些命令前边带有@,那么当make程序实践时,该命令是不会有影响的,在程序运转落成之后,全部前边带@的命令依据反序实施。能够由此实施make -n命令展现那几个命令以供查看。

CPPFLAGS += -DDEBUG_MEMORY

3.假若指标的下令列表中某些命令前边带有-,说明倘使该命令实施有误,会跳过该命令并继续实行。

CPPFLAGS += -DDEBUG_CLASS_NAMES

图片 1

make 命令:

make local_all  "CPPFLAGS += -DSWM_DEBUG"

 

 

普通我们要求探视自身的编纂的makefile是不是有不当,命令是还是不是正确,实行顺序是不是使大家期待的情势,这里就供给动用makefile的参数。

-n
--just-print
--dry-run
--recon
不实行参数,那个参数只是打字与印刷命令,不管目的是还是不是更新,把准绳和血脉相通法规的指令打字与印刷出来,但不实践。

-t
--touch
其一参数的意趣便是把对象文件的时刻更新,但不改动目的文件。也正是说,make假装编写翻译没标,但不是实在的编写翻译指标,只是把指标产生已经编写翻译的气象。

-q
--question
其一参数的行为是找目的的情致,也正是说,假使指标存在,那么此外什么也不会输出,当然也不会进行编写翻译,假设目的不设有,则会打印出一条出错音讯

-W <file>
--waht-if=<file>
--assume-new=<file>
--new-file=<file>
以此参数需求钦命三个文件。平日是源文件(或倚靠文件),make会根据法则推导来运作依赖于这些文件的下令,日常的话,能够和“-n”参数一齐使用,来查看这一个依附文件锁发生的条条框框命令。

-b
-m
那多个参数的效能是忽视和别的版本make的宽容性

-B
--always-make
以为颇负的目的都要求重新更新(重编写翻译)

-C <dir>
--directory=<dir>
点名读取makefile的目录。借使有多少个-C参数,make的演说是背后的门径未来面包车型地铁当做相对路线,并以最后的目录作为被钦定目录。如:"make -C ~/test -C prog"等价于"make -C ~/test/prog"

-d
--debug[=<options>]
出口make的调节和测量试验音信。它有三种分裂的品级可供采用,若无参数,那就是出口最简便易行的调节和测量检验新闻,上面是<option>的取值:
a ----- 也正是all,输出全数的调节和测量试验音信
b ----- basic,值输出轻松的调节和测验新闻。即出口没有须求重编写翻译的目标
v ----- verbose,在b选项的等第以上。输出的新闻包蕴哪个makefile被深入分析,不供给被重编译的依靠文件(或是注重目的)等
i ----- implicit,输出全体的盈盈准则
j ----- jobs,输出实行法则中命令的详细音信,如命令的PID,重返码等
m ----- makefile,输出make读取makefile,更新makefile,执行makefile的信息

-e
--environment-overrides
指明景况变量的值覆盖makefile中定义的变量的值

-f=<file>
--file=<file>
--makefile=<file>
内定须要进行的makefile

-h
--help
展现支持音讯

-i
--ignore-errors
在实施时马虎全体的谬误

-I <dir>
--include-dir=<dir>
点名八个被含有makefile的搜索目的。可以运用五个"-I"参数来钦定三个对象

-j [<jobsnum>]
--jobs[=<jobsnum>]
指同不时候运维命令的个数。若无这一个参数,make运转命令时能运营多少就运营多少。假使有三个上述的“-j”参数,那么仅最后三个“-j”才是可行的。

-k
--keep-going
出错也不休憩运作。如若一个目的战败了,那么依赖于其上的对象就不会被实行了

-l <load>
--load-average[=<load>]
--max-load[=<load>]
钦命make运转命令的载荷

-n
--just-print
--dry-run
--recon
仅输出试行进程中的命令序列,但并不奉行

-o <file>
--old-file=<file>
--assume-old=<file>
不另行生成的钦命的<file>,就算那个指标的依赖性文件新于他

-p
--print-data-base
输出makefile中的全体音讯,满含全部的平整和变量。那一个参数会让贰个简练的makefile都会输出一群消息。假设您只是想出口新闻而不想进行makefile,你能够使用"make -qp"命令。假若您想查看实施makefile前的预设变量和法规,你能够选用“make -p -f /dev/null"。这几个参数输出的音讯包涵着你的makefile文件的文书名和行号,所以,用那些参数来调治你的makefile会是很有用的,极度是当您的意况变量很复杂的时候。

-q
--question
不运行命令,也不出口。仅仅是反省所钦点的对象是或不是须要更新。假诺是0,则表明要翻新,倘诺是2则表明是有荒唐发生。

-r
--no-builtin-rules
不准make使用任何带有法规

-R
--no-builtin-variabes
取缔make使用别的功用于变了上的盈盈准则

-s
--silent
--quiet
在指令运转时不出口命令的输出

-S
--no-keep-going
--stop
收回-k选项的功能。因为微微时候,make的选拔是从遇到变量”MAKEFLAGS“中接二连三下来的,所以您能够在命令行中使用那些参数来让景况变量中的-k选项失效

-t
--touch
也就是UNIX的touch命令,只是把指标的更动日期改为最新的,也便是阻挠生成指标的一声令下运营

-v
--version
出口make程序的本子,版权等关于make的新闻

-w
--print-directory
出口运维makefile早先和现在的消息,那个参数对于追踪嵌套式调用make时很有用

--no-print-directory
禁止-w选项

-W <file>
--what-if=<file>
--new-file=<file>
--assume-file=<file>
若果指标<file>须要革新,纵然和”-n“选项使用,那么那几个参数就能够输出该指标更新时的运作动作。若无”-n“那么就如运转UNIX的”touch“命令同样,使得<file>的修改时间为近期时刻

--warn-undefined-variables
要是make开采有未定义的变量,那么就输出警报信息

本文由六合联盟网发布于关于计算机,转载请注明出处:Linux基础教程

关键词: