📄 autobook_201.html
字号:
<HTML><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><!-- Created on September, 12 2004 by texi2html 1.64 --><!-- Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) Karl Berry <karl@freefriends.org> Olaf Bachmann <obachman@mathematik.uni-kl.de> and many others.Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> --><HEAD><TITLE>Autoconf, Automake, and Libtool: Conditionals</TITLE><META NAME="description" CONTENT="Autoconf, Automake, and Libtool: Conditionals"><META NAME="keywords" CONTENT="Autoconf, Automake, and Libtool: Conditionals"><META NAME="resource-type" CONTENT="document"><META NAME="distribution" CONTENT="global"><META NAME="Generator" CONTENT="texi2html 1.64"><script language="Javascript"><!-- // Check the browser version. function checkVersion() { if (navigator.appVersion.charAt(0)>=3) return true; if (navigator.appVersion.charAt(0)>=4) return true; else return false; } if (checkVersion()) { homeon = new Image(); homeon.src = "homeon.png"; homeoff = new Image(); homeoff.src = "home.png"; tocon = new Image(); tocon.src = "tocon.png"; tocoff = new Image(); tocoff.src = "toc.png"; indexon = new Image(); indexon.src = "indexon.png"; indexoff = new Image(); indexoff.src = "index.png"; helpon = new Image(); helpon.src = "helpon.png"; helpoff = new Image(); helpoff.src = "help.png"; backon = new Image(); backon.src = "backon.png"; backoff = new Image(); backoff.src = "back.png"; forwardon = new Image(); forwardon.src = "forwardon.png"; forwardoff = new Image(); forwardoff.src = "forward.png"; prevon = new Image(); prevon.src = "prevon.png"; prevoff = new Image(); prevoff.src = "prev.png"; nexton = new Image(); nexton.src = "nexton.png"; nextoff = new Image(); nextoff.src = "next.png"; upon = new Image(); upon.src = "upon.png"; upoff = new Image(); upoff.src = "up.png"; } function img_act(imgName) { if (checkVersion()) { imgOn = eval(imgName + "on.src"); document [imgName].src = imgOn; } } function img_inact(imgName) { if (checkVersion()) { imgOff = eval(imgName + "off.src"); document [imgName].src = imgOff; } }// --></SCRIPT></HEAD><BODY LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#6688AA" VLINK="#336688" ALINK="#808080"><A NAME="SEC201"></A><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=10><TR VALIGN="TOP"><TD ALIGN="MIDDLE" WIDTH=50 BGCOLOR="#e6e6e6"><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_200.html#SEC200" onMouseover="img_act('prev')" onMouseout="img_inact('prev')"><IMG SRC="prev.png" BORDER="0" ALT="Back: Macro management" ALIGN="MIDDLE" NAME="prev"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_202.html#SEC202" onMouseover="img_act('next')" onMouseout="img_inact('next')"><IMG SRC="next.png" BORDER="0" ALT="Forward: Looping" ALIGN="MIDDLE" NAME="next"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_202.html#SEC202" onMouseover="img_act('back')" onMouseout="img_inact('back')"><IMG SRC="back.png" BORDER="0" ALT="FastBack: Looping" ALIGN="MIDDLE" NAME="back"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_198.html#SEC198" onMouseover="img_act('up')" onMouseout="img_inact('up')"><IMG SRC="up.png" BORDER="0" ALT="Up: Features of M4" ALIGN="MIDDLE" NAME="up"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_205.html#SEC205" onMouseover="img_act('forward')" onMouseout="img_inact('forward')"><IMG SRC="forward.png" BORDER="0" ALT="FastForward: Writing macros within the GNU Autotools framework" ALIGN="MIDDLE" NAME="forward"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook.html#SEC_Top" onMouseover="img_act('home')" onMouseout="img_inact('home')"><IMG SRC="home.png" BORDER="0" ALT="Top: Autoconf, Automake, and Libtool" ALIGN="MIDDLE" NAME="home"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_toc.html#SEC_Contents" onMouseover="img_act('toc')" onMouseout="img_inact('toc')"><IMG SRC="toc.png" BORDER="0" ALT="Contents: Table of Contents" ALIGN="MIDDLE" NAME="toc"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_285.html#SEC285" onMouseover="img_act('index')" onMouseout="img_inact('index')"><IMG SRC="index.png" BORDER="0" ALT="Index: Index" ALIGN="MIDDLE" NAME="index"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_abt.html#SEC_About" onMouseover="img_act('help')" onMouseout="img_inact('help')"><IMG SRC="help.png" BORDER="0" ALT="About: About this document" ALIGN="MIDDLE" NAME="help"></A></TD></TR></TABLE></TD><TD ALIGN="LEFT"><H3> 21.4.3 Conditionals </H3><!--docid::SEC201::--><P>Macros which can expand to different strings based on runtime tests areextremely useful--they are used extensively throughout macros inGNU Autotools and third party macros. The macro that we will examineclosely is <CODE>ifelse</CODE>. This macro compares two strings and expandsto a different string based on the result of the comparison. The firstform of <CODE>ifelse</CODE> is akin to the <CODE>if</CODE>/<CODE>then</CODE>/<CODE>else</CODE>construct in other programming languages:</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>ifelse(string1, string2, equal, not-equal)</FONT></pre></td></tr></table></P><P>The other form is unusual to a beginner because it actually resembles a<CODE>case</CODE> statement from other programming languages:</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>ifelse(string1, string2, equala, string3, string4, equalb, default)</FONT></pre></td></tr></table></P><P>If <SAMP>`string1'</SAMP> and <SAMP>`string2'</SAMP> are equal, this macro expands to<SAMP>`equala'</SAMP>. If they are not equal, <CODE>m4</CODE> will shift the argumentlist three positions to the left and try again:</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>ifelse(string3, string4, equalb, default)</FONT></pre></td></tr></table></P><P>If <SAMP>`string3'</SAMP> and <SAMP>`string4'</SAMP> are equal, this macro expands to<SAMP>`equalb'</SAMP>. If they are not equal, it expands to <SAMP>`default'</SAMP>.The number of cases that may be in the argument list is unbounded.</P><P>As it has been mentioned in <A HREF="autobook_196.html#SEC196">21.3.2 Macros and macro expansion</A>, macrosthat accept arguments may access their arguments through specially namedmacros like <SAMP>`$1'</SAMP>. If a macro has been defined, no checking ofargument counts is performed before it is expanded and the macro mayexamine the number of arguments given through the <SAMP>`$#'</SAMP> macro. Thishas a useful result: you may invoke a macro with too few (or too many)arguments and the macro will still be expanded. In the example below,<SAMP>`$2'</SAMP> will expand to the empty string.</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>define([foo], [$1 and $2])dnlfoo([a])=>a and</FONT></pre></td></tr></table></P><P>This is useful because <CODE>m4</CODE> will expand the macro and give themacro the opportunity to test each argument for the empty string. Ineffect, we have the equivalent of default arguments from otherprogramming languages. The macro can use <CODE>ifelse</CODE> to provide adefault value if, say, <SAMP>`$2'</SAMP> is the empty string. You will noticein much of the documentation for existing Autoconf macros that argumentsmay be left blank to accept the default value. This is an importantidiom that you should practice in your own macros.</P><P>In this example, we wish to accept the default shell code fragment forthe case where <TT>`/etc/passwd'</TT> is found in the build system's filesystem, but output `Big trouble!' if it is not.</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>AC_CHECK_FILE([/etc/passwd], [], [echo "Big trouble!"])</FONT></pre></td></tr></table></P><P><A NAME="Looping"></A></TR></TABLE><BR> <FONT SIZE="-1">This document was generatedby <I>Gary V. Vaughan</I> on <I>September, 12 2004</I>using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html"><I>texi2html</I></A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -