📄 10.htm
字号:
<tr><td align="right"><a href='/user/ire_wang'>ire_wang</a> <font color="#FF0000">(2)</font></td></tr>
</table>
</td>
</tr>
</table>
</TD>
<TD vAlign="top" width="786">
<table width="100%" border="0" cellpadding="4">
<tr>
<td width="10" height="19"></td>
<td height="19">
<table width="100%" border="0" cellspacing="3" cellpadding="3">
<tr>
<td>
<a href="http://www.csdn.net/">CSDN</a> - <a href="http://dev.csdn.net/">文档中心</a>
- <font color="#003399">
<a id="ArticleTitle1_ArticleTitle1_hlClass" href="/articlelist.aspx?c=13">其他</a></font>
</td>
<TD align="right">
阅读:<span id="ArticleTitle1_ArticleTitle1_lblReadCount">18597</span>
评论:
<span id="ArticleTitle1_ArticleTitle1_lblCommentCount">0</span>
<a href="#Comment">参与评论</a>
</TD>
</tr>
</table>
<table width="100%" border="0" cellspacing="3" cellpadding="3" bgcolor="#eeeeee">
<tr>
<td width="60" height="0" nowrap></td>
<td></td>
</tr>
<tr>
<td height="16" align="center" nowrap bgcolor="#003399"><font color="#ffffff">标题</font></td>
<td><b>
<span id="ArticleTitle1_ArticleTitle1_lblTitle">跟我一起写 Makefile(十)</span></b>
选择自 <a id="ArticleTitle1_ArticleTitle1_AuthorLink" href="/user/haoel">haoel</a> 的 Blog
</td>
</tr>
<tr>
<td height="16" align="center" bgcolor="#003399"><font color="#ffffff">关键字</font></td>
<td width="500">
<span id="ArticleTitle1_ArticleTitle1_lblKeywords">C C++ make makefile</span></td>
</tr>
<tr>
<td height="16" align="center" bgcolor="#003399"><font color="#ffffff">出处</font></td>
<td>
<span id="ArticleTitle1_ArticleTitle1_lblSource"></span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="10"></td>
<td><span id="ArticleContent1_ArticleContent1_lblContent"><P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P>
<H3 style="MARGIN: 13pt 0cm"><FONT size=2><SPAN style="FONT-FAMILY: 'Courier New'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">四、</SPAN><SPAN lang=EN-US>foreach </SPAN><SPAN style="FONT-FAMILY: 'Courier New'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">函数</SPAN></FONT></H3>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">foreach</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>函数和别的函数非常的不一样。因为这个函数是用来做循环用的,</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">Makefile</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>中的</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">foreach</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>函数几乎是仿照于</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">Unix</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>标准</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">Shell</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>(</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">/bin/sh</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>)中的</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">for</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>语句,或是</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">C-Shell</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>(</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">/bin/csh</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>)中的</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">foreach</SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'">语句而构建的。它的语法是:</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p></o:p></SPAN></FONT></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-tab-count: 1"> </SPAN>$(foreach <var>,<list>,<text>)<o:p></o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>这个函数的意思是,把参数</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><list></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>中的单词逐一取出放到参数</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><var></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>所指定的变量中,然后再执行</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><text></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>所包含的表达式。每一次</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><text></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>会返回一个字符串,循环过程中,</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><text></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>的所返回的每个字符串会以空格分隔,最后当整个循环结束时,</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><text></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>所返回的每个字符串所组成的整个字符串(以空格分隔)将会是</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">foreach</SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'">函数的返回值。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p></o:p></SPAN></FONT></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>所以,</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><var></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>最好是一个变量名,</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><list></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>可以是一个表达式,而</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><text></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>中一般会使用</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><var></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>这个参数来依次枚举</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><list></SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'">中的单词。举个例子:</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p></o:p></SPAN></FONT></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes"> </SPAN>names := a b c d<o:p></o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes"> </SPAN>files := $(foreach n,$(names),$(n).o)<o:p></o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>上面的例子中,</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">$(name)</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>中的单词会被挨个取出,并存到变量“</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">n</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>”中,“</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">$(n).o</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>”每次根据“</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">$(n)</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>”计算出一个值,这些值以空格分隔,最后作为</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">foreach</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>函数的返回,所以,</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">$(files)</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>的值是“</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">a.o b.o c.o d.o</SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'">”。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p></o:p></SPAN></FONT></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>注意,</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">foreach</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>中的</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><var></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>参数是一个临时的局部变量,</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">foreach</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>函数执行完后,参数</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><var></SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>的变量将不在作用,其作用域只在</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">foreach</SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'">函数当中。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p></o:p></SPAN></FONT></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<H3 style="MARGIN: 13pt 0cm"><FONT size=2><SPAN style="FONT-FAMILY: 'Courier New'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">五、</SPAN><SPAN lang=EN-US>if </SPAN><SPAN style="FONT-FAMILY: 'Courier New'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">函数</SPAN></FONT></H3>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">if</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>函数很像</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">GNU</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>的</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">make</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>所支持的条件语句——</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">ifeq</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'"><FONT face=宋体>(参见前面所述的章节),</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">if</SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'">函数的语法是:</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p></o:p></SPAN></FONT></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes"> </SPAN>$(if <condition>,<then-part>) <o:p></o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: 'Courier New'">或是</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p></o:p></SPAN></FONT></P>
<P class=MsoPlainText style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -