📄 gnu make 使用手册(中译版).htm
字号:
<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 54pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">14.3<A
href="http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html#_14.3_指定命令的变量">指定命令的变量</A>
<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 54pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">14.4<A
href="http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html#_14.4_用于安装路径的变量">安装路径变量</A>
<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 54pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">14.5<A
href="http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html#_14.5用户标准目标">用户标准目标</A>
<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 54pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">14.6<A
href="http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html#_14.6_安装命令分类">安装命令分类</A>
<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 18pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">15<A
href="http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html#_15_快速参考">快速参考</A>
<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 18pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">16<A
href="http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html#_16_make产生的错误">make产生的错误</A>
<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 18pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">17<A
href="http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html#_17_复杂的makfile文件例子">复杂的Makefile文件例子</A>
<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>附录<SPAN
style="mso-spacerun: yes"> </SPAN><A
href="http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html#_名词翻译对照表">名词翻译对照表</A><o:p></o:p></SPAN></P>
<H1><A name=_1_Make_概述></A><SPAN lang=EN-US
style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 22.0pt">1 Make
概述<o:p></o:p></SPAN></H1>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">Make 可自动决定一个大程序中哪些文件需要重新编译,并发布重新编译它们的命令。本版本GNU
Make使用手册由Richard M. Stallman and Roland McGrath编著,是从Paul D.
Smith撰写的V3.76版本发展过来的。<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">GNU Make符合<CITE>IEEE Standard 1003.2-1992</CITE>
(POSIX.2) 6.2章节的规定。<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">因为<SPAN
lang=EN-US>C语言程序更具有代表性,所以我们的例子基于C语言程序,但Make并不是仅仅能够处理C语言程序,它可以处理那些编译器能够在Shell命令下运行的的各种语言的程序。事实上,GNU
Make不仅仅限于程序,它可以适用于任何如果一些文件变化导致另外一些文件必须更新的任务。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">如果要使用<SPAN
lang=EN-US>Make,必须先写一个称为Makefile的文件,该文件描述程序中各个文件之间的相互关系,并且提供每一个文件的更新命令。在一个程序中,可执行程序文件的更新依靠OBJ文件,而OBJ文件是由源文件编译得来的。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">一旦合适的<SPAN
lang=EN-US>Makefile文件存在,每次更改一些源文件,在shell命令下简单的键入:<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">make<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">就能执行所有的必要的重新编译任务。<SPAN
lang=EN-US>Make程序根据Makefile文件中的数据和每个文件更改的时间戳决定哪些文件需要更新。对于这些需要更新的文件,Make基于Makefile文件发布命令进行更新,进行更新的方式由提供的命令行参数控制。具体操作请看<B
style="mso-bidi-font-weight: normal"><I>运行Make</I></B>章节。<o:p></o:p></SPAN></SPAN></P>
<H2><A name=_1.1怎样阅读本手册></A><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">1.1怎样阅读本手册<o:p></o:p></SPAN></H2>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">如果您现在对<SPAN lang=EN-US>Make一无所知或者您仅需要了解对make
的普通性介绍,请查阅前几章内容,略过后面的章节。前几章节是普通介绍性内容,后面的章节是具体的专业、技术内容。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">如果您对其它<SPAN lang=EN-US>Make程序十分熟悉,请参阅<B
style="mso-bidi-font-weight: normal"><I>GNU Make的特点</I></B>和</SPAN></SPAN><B
style="mso-bidi-font-weight: normal"><I><SPAN
style="FONT-FAMILY: 黑体; mso-hansi-font-family: 宋体">不兼容性和失去的特点</SPAN></I></B><SPAN
style="FONT-FAMILY: 宋体">部分,</SPAN><B
style="mso-bidi-font-weight: normal"><I><SPAN lang=EN-US
style="FONT-FAMILY: 黑体; mso-hansi-font-family: 宋体">GNU
Make的特点</SPAN></I></B><SPAN style="FONT-FAMILY: 宋体">这一章列出了<SPAN lang=EN-US>GNU
Make对make程序的扩展,<B
style="mso-bidi-font-weight: normal"><I>不兼容和失去的特点</I></B>一章解释了其它Make程序有的特征而GNU
Make缺乏的原因。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">对于快速浏览者,请参阅<B
style="mso-bidi-font-weight: normal"><I>选项概要、快速参考</I></B>和<B
style="mso-bidi-font-weight: normal"><I>内建的特殊目标名</I></B>部分。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<H2><A name=_1.2问题和BUG></A><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">1.2问题和BUG<o:p></o:p></SPAN></H2>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">如果您有关于<SPAN lang=EN-US>GNU
Make的问题或者您认为您发现了一个BUG,请向开发者报告;我们不能许诺我们能干什么,但我们会尽力修正它。在报告BUG之前,请确定您是否真正发现了BUG,仔细研究文档后确认它是否真的按您的指令运行。如果文档不能清楚的告诉您怎么做,也要报告它,这是文档的一个BUG。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">在您报告或者自己亲自修正<SPAN
lang=EN-US>BUG之前,请把它分离出来,即在使问题暴露的前提下尽可能的缩小Makefile文件。然后把这个Makefile文件和Make给出的精确结果发给我们。同时请说明您希望得到什么,这可以帮助我们确定问题是否出在文档上。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">一旦您找到一个精确的问题,请给我们发<SPAN
lang=EN-US>E-mail,我们的E-mail地址是:<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体"><A
href="mailto:bug-make@gnu.org">bug-make@gnu.org</A><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">在邮件中请包含您使用的<SPAN lang=EN-US>GNU
Make的版本号。您可以利用命令‘make--version’得到版本号。同时希望您提供您的机器型号和操作系统类型,如有可能的话,希望同时提供config.h文件(该文件有配置过程产生)。<o:p></o:p></SPAN></SPAN></P>
<H1><A name=_2_Makefile文件介绍></A><SPAN lang=EN-US
style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 22.0pt">2
Makefile文件介绍<o:p></o:p></SPAN></H1>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">Make程序需要一个所谓的Makefile文件来告诉它干什么。在大多数情况下,Makefile文件告诉Make怎样编译和连接成一个程序。<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">本章我们将讨论一个简单的<SPAN
lang=EN-US>Makefile文件,该文件描述怎样将8个C源程序文件和3个头文件编译和连接成为一个文本编辑器。Makefile文件可以同时告诉Make怎样运行所需要的杂乱无章的命令(例如,清除操作时删除特定的文件)。如果要看更详细、复杂的Makefile文件例子,请参阅<B
style="mso-bidi-font-weight: normal"><I>复杂的Makefile文件例子</I></B>一章。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">当<SPAN
lang=EN-US>Make重新编译这个编辑器时,所有改动的C语言源文件必须重新编译。如果一个头文件改变,每一个包含该头文件的C语言源文件必须重新编译,这样才能保证生成的编辑器是所有源文件更新后的编辑器。每一个C语言源文件编译后产生一个对应的OBJ文件,如果一个源文件重新编译,所有的OBJ文件无论是刚刚编译得到的或原来编译得到的必须从新连接,形成一个新的可执行文件。<o:p></o:p></SPAN></SPAN></P>
<H2><A name=_2.1_规则的样式></A><SPAN lang=EN-US style="FONT-FAMILY: 宋体">2.1
规则的格式<o:p></o:p></SPAN></H2>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">一个简单的<SPAN
lang=EN-US>Makefile文件包含一系列的“规则”,其样式如下:<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">目标<SPAN lang=EN-US>(target)…:
依赖(prerequiries)…<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体"><tab>命令(command)<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN
style="mso-tab-count: 2">
</SPAN>…<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN
style="mso-tab-count: 2">
</SPAN>…<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">目标<SPAN
lang=EN-US>(target)通常是要产生的文件的名称,目标的例子是可执行文件或OBJ文件。目标也可是一个执行的动作名称,诸如‘clean’(详细内容请参阅</SPAN></SPAN><B
style="mso-bidi-font-weight: normal"><I><SPAN
style="FONT-FAMILY: 黑体; mso-hansi-font-family: 宋体">假想目标</SPAN></I></B><SPAN
style="FONT-FAMILY: 宋体">一节)。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">依赖是用来输入从而产生目标的文件,一个目标经常有几个依赖。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">命令是<SPAN
lang=EN-US>Make执行的动作,一个规则可以含有几个命令,每个命令占一行。</SPAN></SPAN><B
style="mso-bidi-font-weight: normal"><SPAN
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt">注意:</SPAN></B><B
style="mso-bidi-font-weight: normal"><SPAN
style="FONT-FAMILY: 宋体">每个命令行前面必须是一个<SPAN
lang=EN-US>Tab字符,即命令行第一个字符是Tab。</SPAN></SPAN></B><SPAN
style="FONT-FAMILY: 宋体">这是不小心容易出错的地方。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">通常,如果一个依赖发生变化,则需要规则调用命令对相应依赖和服务进行处理从而更新或创建目标。但是,指定命令更新目标的规则并不都需要依赖,例如,包含和目标‘<SPAN
lang=EN-US>clern’相联系的删除命令的规则就没有依赖。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">规则一般是用于解释怎样和何时重建特定文件的,这些特定文件是这个详尽规则的目标。<SPAN
lang=EN-US>Make需首先调用命令对依赖进行处理,进而才能创建或更新目标。当然,一个规则也可以是用于解释怎样和何时执行一个动作,详见<B
style="mso-bidi-font-weight: normal"><I>编写规则</I></B>一章。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">一个<SPAN
lang=EN-US>Makefile文件可以包含规则以外的其它文本,但一个简单的Makefile文件仅仅需要包含规则。虽然真正的规则比这里展示的例子复杂,但格式却是完全一样。<o:p></o:p></SPAN></SPAN></P>
<H2><A name=_2.2一个简单的Makefile文件></A><SPAN lang=EN-US
style="FONT-FAMILY: 宋体">2.2一个简单的Makefile文件<o:p></o:p></SPAN></H2>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">一个简单的<SPAN
lang=EN-US>Makefile文件,该文件描述了一个称为文本编辑器(edit)的可执行文件生成方法,该文件依靠8个OBJ文件(.o文件),它们又依靠8个C源程序文件和3个头文件。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">在这个例子中,所有的<SPAN lang=EN-US>C语言源文件都包含‘defs.h’
头文件,但仅仅定义编辑命令的源文件包含‘command.h’头文件,仅仅改变编辑器缓冲区的低层文件包含‘buffer.h’头文件。<o:p></o:p></SPAN></SPAN></P><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体">edit : main.o kbd.o command.o display.o \<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>insert.o search.o files.o utils.o<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>cc -o edit main.o kbd.o command.o display.o \<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>insert.o search.o files.o utils.o<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><![if !supportEmptyParas]> <![endif]><o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体">main.o : main.c defs.h<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>cc -c main.c<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体">kbd.o : kbd.c defs.h command.h<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>cc -c kbd.c<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体">command.o : command.c defs.h command.h<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>cc -c command.c<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体">display.o : display.c defs.h buffer.h<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>cc -c display.c<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体">insert.o : insert.c defs.h buffer.h<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>cc -c insert.c<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体">search.o : search.c defs.h buffer.h<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>cc -c search.c<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体">files.o : files.c defs.h buffer.h command.h<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>cc -c files.c<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体">utils.o : utils.c defs.h<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>cc -c utils.c<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体">clean :<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>rm edit main.o kbd.o command.o display.o \<o:p></o:p></SPAN></PRE><PRE><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes"> </SPAN>insert.o search.o files.o utils.o<o:p></o:p></SPAN></PRE>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">我们把每一个长行使用反斜杠<SPAN
lang=EN-US>-新行法分裂为两行或多行,实际上它们相当于一行,这样做的意图仅仅是为了阅读方便。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">使用<SPAN
lang=EN-US>Makefile文件创建可执行的称为‘edit’的文件,键入:make<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">使用<SPAN lang=EN-US>Makefile文件从目录中删除可执行文件和目标,键入:make
clean<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">在这个<SPAN
lang=EN-US>Makefile文件例子中,目标包括可执行文件‘edit’和OBJ文件‘main.o’及‘kdb.o’。依赖是C语言源文件和C语言头文件如‘main.c’和‘def.h’等。事实上,每一个OBJ文件即是目标也是依赖。所以命令行包括‘cc
-c main.c’和‘cc -c kbd.c’。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">当目标是一个文件时,如果它的任一个依赖发生变化,目标必须重新编译和连接。任何命令行的第一个字符必须是‘<SPAN
lang=EN-US>Tab’字符,这样可以把Makefile文件中的命令行与其它行分别开来。(<B
style="mso-bidi-font-weight: normal">一定要牢记:Make并不知道命令是如何工作的,它仅仅能向您提供保证目标的合适更新的命令。Make的全部工作是当目标需要更新时,按照您制定的具体规则执行命令。</B>)<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.25pt"><SPAN
style="FONT-FAMILY: 宋体">目标‘<SPAN
lang=EN-US>clean’不是一个文件,仅仅是一个动作的名称。正常情况下,在规则中‘clean’这个动作并不执行,目标‘clean’也不需要任何依赖。一般情况下,除非特意告诉make执行‘clean’命令,否则‘clean’命令永远不会执行。注意这样的规则不需要任何依赖,它们存在的目的仅仅是执行一些特殊的命令。象这些不需要依赖仅仅表达动作的目标称为假想目标。详细内容参见<B
style="mso-bidi-font-weight: normal"><I>假想目标</I></B>;参阅</SPAN></SPAN><B
style="mso-bidi-font-weight: normal"><I><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 黑体">命令错</SPAN></I></B><B
style="mso-bidi-font-weight: normal"><I><SPAN
style="FONT-FAMILY: 宋体">误</SPAN></I></B><SPAN style="FONT-FAMILY: 宋体">可以了解<SPAN
lang=EN-US>rm或其它命令是怎样导致make忽略错误的。<o:p></o:p></SPAN></SPAN></
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -