📄 gnu-make-translated.html
字号:
<p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">4.5<a href="#_4.5_%C3%BB%D3%D0%C3%FC%C1%EE%BB%F2%D2%C0%C0%B5%B5%C4%B9%E6%D4%F2">没有命令或依赖的规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">4.6<a href="#_4.6%CA%B9%D3%C3%BF%D5%C4%BF%B1%EA%CE%C4%BC%FE%BC%C7%C2%BC%CA%C2%BC%FE">使用空目录文件记录事件</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">4.7<a href="#_4.7_%C4%DA%B2%BF%CA%B9%D3%C3%B5%C4%D2%BB%D0%A9%CC%D8%CA%E2%C4%BF%B1%EA%C3%FB">内建的特殊目标名</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">4.8<a href="#_4.8_%BE%DF%D3%D0%B6%E0%B8%F6%C4%BF%B1%EA%B5%C4%B9%E6%D4%F2">具有多个目标的规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">4.9<a href="#_4.9_%BE%DF%D3%D0%B6%E0%CC%F5%B9%E6%D4%F2%B5%C4%C4%BF%B1%EA">具有多条规则的目标</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">4.10<a href="#_4.10_%BE%B2%CC%AC%B8%F1%CA%BD%B9%E6%D4%F2">静态格式规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">4.10.1<a href="#_4.10.1_%BE%B2%CC%AC%B8%F1%CA%BD%B9%E6%D4%F2%B5%C4%D3%EF%B7%A8">静态格式规则的语法</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">4.10.2<a href="#_4.10.2%BE%B2%CC%AC%B8%F1%CA%BD%B9%E6%D4%F2%BA%CD%D2%FE%BA%AC%B9%E6%D4%F2">静态格式规则和隐含规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">4.11<a href="#_4.11%CB%AB%C3%B0%BA%C5%B9%E6%D4%F2">双冒号规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">4.12<a href="#_4.12_%D7%D4%B6%AF%C9%FA%B3%C9%D2%C0%C0%B5">自动生成依赖</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US" style="font-family: 宋体;">5 <a href="#_5%D4%DA%B9%E6%D4%F2%D6%D0%CA%B9%D3%C3%C3%FC%C1%EE">在规则中使用命令</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">5.1<a href="#_5.1_%C3%FC%C1%EE%BB%D8%CF%D4">命令回显</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">5.2<a href="#_5.2%C3%FC%C1%EE%B5%C4%D6%B4%D0%D0">执行命令</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">5.3<a href="#_5.3_%B2%A2%D0%D0%D6%B4%D0%D0">并行执行</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">5.4<a href="#_5.4%C3%FC%C1%EE%B4%ED%CE%F3">命令错误</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">5.5<a href="#_5.5%D6%D0%B6%CF%BB%F2%B9%D8%B1%D5make"><code><span style="">中断或关闭make</span></code></a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">5.6<a href="#_5.6_make%B5%C4%B5%DD%B9%E9%B5%F7%D3%C3"><code><span style="">递归调用make</span></code></a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">5.6.1<a href="#_5.6.1_%B1%E4%C1%BFMAKE%B5%C4%B9%A4%D7%F7%B7%BD%CA%BD">变量MAKE的工作方式</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">5.6.2<a href="#_5.6.2%D3%EB%D7%D3make%B5%C4%CD%A8%D1%B6%B1%E4%C1%BF"><code><span style="">与子make通讯的变量</span></code></a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">5.6.3<a href="#_5.6.3%D3%EB%D7%D3make%B5%C4%CD%A8%D1%B6%D1%A1%CF%EE"><code><span style="">与子make通讯的选项</span></code></a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">5.6.4<a href="#_5.6.4_%A1%AE--print-directory%A1%AF%D1%A1%CF%EE">`--print-directory'选项</a><o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">5.7<a href="#_5.7%B6%A8%D2%E5%B9%CC%B6%A8%B4%CE%D0%F2%B5%C4%C3%FC%C1%EE">定义固定次序命令</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">5.8<a href="#_5.8_%CA%B9%D3%C3%BF%D5%C3%FC%C1%EE">使用空命令</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US" style="font-family: 宋体;">6<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-stretch: normal; font-size-adjust: none;">        </span></span><!--[endif]--><span lang="EN-US" style="font-family: 宋体;"><a href="#_6_%CA%B9%D3%C3%B1%E4%C1%BF">使用变量</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">6.1<a href="#_6.1_%B1%E4%C1%BF%D2%FD%D3%C3%BB%F9%B4%A1">变量引用基础</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">6.2<a href="#_6.2_%B1%E4%C1%BF%B5%C4%C1%BD%B8%F6%CC%D8%C9%AB">变量的两个特色</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">6.3<a href="#_6.3%B1%E4%C1%BF%D2%FD%D3%C3%B8%DF%BC%B6%BC%BC%CA%F5">变量高级引用技术</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">6.3.1<a href="#_6.3.1%CC%E6%BB%BB%D2%FD%D3%C3">替换引用</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">6.3.2<a href="#_6.3.2%C7%B6%CC%D7%B1%E4%C1%BF%D2%FD%D3%C3%A3%A8%BC%C6%CB%E3%B5%C4%B1%E4%C1%BF%C3%FB%A3%A9">嵌套变量引用</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">6.4<a href="#_6.4%B1%E4%C1%BF%B5%C4%C8%A1%D6%B5">变量取值</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">6.5<a href="#_6.5%C9%E8%D6%C3%B1%E4%C1%BF">设置变量</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">6.6<a href="#_6.6_%CE%AA%B1%E4%C1%BF%D7%B7%BC%D3%B8%FC%B6%E0%B5%C4%CE%C4%B1%BE">为变量值追加文本</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">6.7<a href="#_6.7_override%D6%B8%C1%EE">override指令</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">6.8<a href="#_6.8%B6%A8%D2%E5%B6%E0%D0%D0%B1%E4%C1%BF">定义多行变量</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">6.9<a href="#_6.9_%BB%B7%BE%B3%B1%E4%C1%BF">环境变量</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">6.10<a href="#_6.10_%CC%D8%B6%A8%C4%BF%B1%EA%B1%E4%C1%BF%B5%C4%D6%B5">特定目标变量的值</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">6.11<a href="#_6.11_%CC%D8%B6%A8%B8%F1%CA%BD%B1%E4%C1%BF%B5%C4%D6%B5">特定格式变量的值</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US" style="font-family: 宋体;">7 <a href="#_7_makefile%CE%C4%BC%FE%B5%C4%CC%F5%BC%FE%D3%EF%BE%E4">Makefile文件的条件语句</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">7.1<a href="#_7.1%CC%F5%BC%FE%D3%EF%BE%E4%B5%C4%C0%FD%D7%D3">条件语句的例子</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">7.2<a href="#_7.2%CC%F5%BC%FE%D3%EF%BE%E4%B5%C4%D3%EF%B7%A8">条件语句的语法</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">7.3<a href="#_7.3%B2%E2%CA%D4%B1%EA%D6%BE%B5%C4%CC%F5%BC%FE%D3%EF%BE%E4">测试标志的条件语句</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US" style="font-family: 宋体;">8 <a href="#_8_%CE%C4%B1%BE%D7%AA%BB%BB%BA%AF%CA%FD">文本转换函数</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">8.1<a href="#_8.1%BA%AF%CA%FD%B5%F7%D3%C3%D3%EF%B7%A8">函数调用语法</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">8.2<a href="#_8.2%D7%D6%B7%FB%B4%AE%CC%E6%BB%BB%BA%CD%B7%D6%CE%F6%BA%AF%CA%FD">字符串替换和分析函数</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">8.3<a href="#_8.3%CE%C4%BC%FE%C3%FB%BA%AF%CA%FD">文件名函数</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">8.4<a href="#_8.4%BA%AF%CA%FDforeach">函数foreach</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">8.5<a href="#_8.5%BA%AF%CA%FDif">函数if</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">8.6<a href="#_8.6%BA%AF%CA%FDcall">函数call</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">8.7<a href="#_8.7%BA%AF%CA%FDorigin">函数origin</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">8.8<a href="#_8.8_%BA%AF%CA%FDshell">函数shell</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">8.9<a href="#_8.9_%BF%D8%D6%C6make%B5%C4%BA%AF%CA%FD">控制Make的函数</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US" style="font-family: 宋体;">9<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-stretch: normal; font-size-adjust: none;">        </span></span><!--[endif]--><span lang="EN-US" style="font-family: 宋体;"><a href="#_9_%D4%CB%D0%D0make"><code><span style="">运行make</span></code></a><o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">9.1<a href="#_9.1_%D6%B8%B6%A8makefile%CE%C4%BC%FE%B5%C4%B2%CE%CA%FD">指定Makefile文件的参数</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">9.2<a href="#_9.2%D6%B8%B6%A8%D7%EE%D6%D5%C4%BF%B1%EA%B5%C4%B2%CE%CA%FD">指定最终目标的参数</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">9.3<a href="#_9.3_%B4%FA%CC%E6%D6%B4%D0%D0%C3%FC%C1%EE">代替执行命令</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">9.4<a href="#_9.4%B1%DC%C3%E2%D6%D8%D0%C2%B1%E0%D2%EB%D2%BB%D0%A9%CE%C4%BC%FE">避免重新编译文件</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">9.5<a href="#_9.5%D6%D8%D4%D8%B1%E4%C1%BF">变量重载</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">9.6<a href="#_9.6_%B2%E2%CA%D4%B1%E0%D2%EB%B3%CC%D0%F2">测试编译程序</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">9.7<a href="#_9.7_%D1%A1%CF%EE%B8%C5%D2%AA">选项概要</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US" style="font-family: 宋体;">10 <a href="#_10_%CA%B9%D3%C3%D2%FE%BA%AC%B9%E6%D4%F2">使用隐含规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">10.1<a href="#_10.1_%CA%B9%D3%C3%D2%FE%BA%AC%B9%E6%D4%F2">使用隐含规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">10.2<a href="#_10.2%D2%FE%BA%AC%B9%E6%D4%F2%C4%BF%C2%BC">隐含规则目录</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">10.3<a href="#_10.3%D2%FE%BA%AC%B9%E6%D4%F2%CA%B9%D3%C3%B5%C4%B1%E4%C1%BF">隐含规则使用的变量</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">10.4<a href="#_10.4_%D2%FE%BA%AC%B9%E6%D4%F2%C1%B4">隐含规则链</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">10.5<a href="#_10.5%B6%A8%D2%E5%D3%EB%D6%D8%D0%C2%B6%A8%D2%E5%B8%F1%CA%BD%B9%E6%D4%F2">定义与重新定义格式规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">10.5.1<a href="#_10.5.1%B8%F6%CA%C7%B9%E6%D4%F2%BC%F2%BD%E9">格式规则简介</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">10.5.2<a href="#_10.5.2%B8%F1%CA%BD%B9%E6%D4%F2%B5%C4%C0%FD%D7%D3">格式规则的例子</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">10.5.3<a href="#_10.5.3%D7%D4%B6%AF%B1%E4%C1%BF">自动变量</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">10.5.4<a href="#_10.5.4%B8%F1%CA%BD%C6%A5%C5%E4">格式匹配</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">10.5.5<a href="#_10.5.5%CD%F2%D3%C3%B9%E6%D4%F2">万用规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">10.5.6<a href="#_10.5.6%C9%BE%B3%FD%D2%FE%BA%AC%B9%E6%D4%F2">删除隐含规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">10.6<a href="#_10.6_%B6%A8%D2%E5%D7%EE%D0%C2%C0%E0%D0%CD%B5%C4%C8%B1%CA%A1%B9%E6%D4%F2">定义最新类型的缺省规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">10.7<a href="#_10.7_%B9%FD%CA%B1%B5%C4%BA%F3%D7%BA%B9%E6%D4%F2">过时的后缀规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">10.8<a href="#_10.8%D2%FE%BA%AC%B9%E6%D4%F2%CB%D1%D1%B0%CB%E3%B7%A8">隐含规则搜寻算法</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US" style="font-family: 宋体;">11 <a href="#_11%CA%B9%D3%C3make%B8%FC%D0%C2%B5%B5%B0%B8%CE%C4%BC%FE">使用make更新档案文件</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">11.1<a href="#_11.1%B5%B5%B0%B8%B3%C9%D4%B1%C4%BF%B1%EA">档案成员目标</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">11.2<a href="#_11.2_%D3%C3%D3%DA%B5%B5%B0%B8%B3%C9%D4%B1%C4%BF%B1%EA%B5%C4%D2%FE%BA%AC%B9%E6%D4%F2">档案成员目标的隐含规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 90pt;"><span lang="EN-US" style="font-family: 宋体;">11.2.1<a href="#_11.2.1%B8%FC%D0%C2%B5%B5%B0%B8%B5%C4%B7%FB%BA%C5%CB%F7%D2%FD%B1%ED">更新档案成员的符号索引表</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">11.3<a href="#_11.3_%CA%B9%D3%C3%B5%B5%B0%B8%B5%C4%CE%A3%CF%D5">使用档案的危险</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">11.4<a href="#_11.4_%D3%C3%D3%DA%B5%B5%B0%B8%CE%C4%BC%FE%B5%C4%BA%F3%D7%BA%B9%E6%D4%F2">档案文件的后缀规则</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US" style="font-family: 宋体;">12 <a href="#_12_GNU_make%B5%C4%CC%D8%B5%E3"><code><span style="">GNU make的特点</span></code></a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US" style="font-family: 宋体;">13 <a href="#_13_%B2%BB%BC%E6%C8%DD%D0%D4%BA%CD%C8%A5%B5%F4%B5%C4%CC%D8%B5%E3">不兼容性和失去的特点</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US" style="font-family: 宋体;">14 <a href="#_14_makefile%CE%C4%BC%FE%B9%DF%C0%FD">Makefile文件惯例</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">14.1<a href="#_14.1_makefile%CE%C4%BC%FE%B5%C4%CD%A8%D3%C3%B9%DF%C0%FD">makefile文件的通用惯例</a><o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">14.2<a href="#_14.2_makefile%CE%C4%BC%FE%D6%D0%B5%C4%B9%A4%BE%DF">makefile文件的工具</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 54pt;"><span lang="EN-US" style="font-family: 宋体;">14.3<a href="#_14.3_%D6%B8%B6%A8%C3%FC%C1%EE%B5%C4%B1%E4%C1%BF">指定命令的变量</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="#_14.4_%D3%C3%D3%DA%B0%B2%D7%B0%C2%B7%BE%B6%B5%C4%B1%E4%C1%BF">安装路径变量</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="#_14.5%D3%C3%BB%A7%B1%EA%D7%BC%C4%BF%B1%EA">用户标准目标</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="#_14.6_%B0%B2%D7%B0%C3%FC%C1%EE%B7%D6%C0%E0">安装命令分类</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US" style="font-family: 宋体;">15<a href="#_15_%BF%EC%CB%D9%B2%CE%BF%BC">快速参考</a> <o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US" style="font-family: 宋体;">16<a href="#_16_make%B2%FA%C9%FA%B5%C4%B4%ED%CE%F3">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="#_17_%B8%B4%D4%D3%B5%C4makfile%CE%C4%BC%FE%C0%FD%D7%D3">复杂的Makefile文件例子</a> <o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体;"><span style="">   </span>附录<span style="">  </span><a href="#_%C3%FB%B4%CA%B7%AD%D2%EB%B6%D4%D5%D5%B1%ED">名词翻译对照表</a><o:p></o:p></span></p><h1><a name="_1_Make_概述"></a><span lang="EN-US" style="font-size: 18pt; font-family: 宋体;">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使用手册由RichardM. 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命令下运行的的各种语言的程序。事实上,GNUMake不仅仅限于程序,它可以适用于任何如果一些文件变化导致另外一些文件必须更新的任务。<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=""><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=""><i>GNU Make的特点</i></b>和</span></span><b style=""><i><span style="font-family: 黑体;">不兼容性和失去的特点</span></i></b><span style="font-family: 宋体;">部分,</span><b style=""><i><span lang="EN-US" style="font-family: 黑体;">GNU Make的特点</span></i></b><span style="font-family: 宋体;">这一章列出了<span lang="EN-US">GNU Make对make程序的扩展,<b style=""><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=""><i>选项概要、快速参考</i></b>和<b style=""><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">GNUMake的问题或者您认为您发现了一个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: 宋体;">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=""><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="">        </span>…<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体;"><span style="">        </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=""><i><span style="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-ind
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -