⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autoconf.htm

📁 Makefile编程及相关资料的介绍与入门。很适合初学者的学习与借鉴
💻 HTM
📖 第 1 页 / 共 5 页
字号:
(参见<A 
href="http://www.linuxforum.net/books/autoconf.html#SEC9">寻找<CODE>configure</CODE>的输入文件</A>)。 
</P>
<P>
<DL>
  <DT><U>宏:</U> <B>AC_OUTPUT</B> <I>([<VAR>file</VAR>... [, 
  <VAR>extra-cmds</VAR> [, <VAR>init-cmds</VAR>]]])</I> 
  <DD><A name=IDX9></A><A 
  name=IDX10></A>创建输出文件。在<TT>`configure.in'</TT>的末尾调用本宏一次。参数<VAR>file</VAR>...是一个以空格分隔的输出文件的列表;它可能为空。本宏通过从一个输入文件(缺省情况下名为<TT>`<VAR>file</VAR>.in'</TT>)中复制,并替换输出变量的值以创建每个给出的<TT>`<VAR>file</VAR>'</TT>。关于使用输出变量的详情,请参见<A 
  href="http://www.linuxforum.net/books/autoconf.html#SEC11">Makefile中的替换</A>。关于创建输出变量的详情,请参见<A 
  href="http://www.linuxforum.net/books/autoconf.html#SEC54">设定输出变量</A>。如果输出文件所在的目录不存在,本宏将创建该目录(但不会创建目录的父目录)。通常,<TT>`Makefile'</TT>是按照这种方式创建的,但其他文件,例如<TT>`.gdbinit'</TT>,也可以这样创建。 

  <P></P>
  <P>如果调用了<CODE>AC_CONFIG_HEADER</CODE>、<CODE>AC_LINK_FILES</CODE>或者<CODE>AC_CONFIG_SUBDIRS</CODE>,本宏也将创建出现在它们的参数中的文件。 
  </P>
  <P>一个典型的对<CODE>AC_OUTPUT</CODE>调用如下: <PRE>AC_OUTPUT(Makefile src/Makefile man/Makefile X/Imakefile)
</PRE>
  <P>你可以通过在<VAR>file</VAR>之后添加一个用冒号分隔的输入文件列表以自行设定输入文件名。例如: <PRE>AC_OUTPUT(Makefile:templates/top.mk lib/Makefile:templates/lib.mk)
AC_OUTPUT(Makefile:templates/vars.mk:Makefile.in:templates/rules.mk)
</PRE>
  <P>这样做可以使得你的文件名能够被MS-DOS接受,或者可以把模板文件(boilerplate)添加到文件的开头或者结尾。 </P>
  <P>如果你给出了<VAR>extra-cmds</VAR>,那么这些命令将被插入到<TT>`config.status'</TT>中以便在<TT>`config.status'</TT> 
  完成了其他的所有处理之后运行<VAR>extra-cmds</VAR>。如果给出了<VAR>init-cmds</VAR>,它们就被插入 
  <VAR>extra-cmds</VAR>之前,并且在<CODE>configure</CODE>中将对它们进行shell变量、命令和反斜线替换。你可以用 
  <VAR>init-cmds</VAR>把变量从<CODE>configure</CODE>中传递到<VAR>extra-cmds</VAR>。如果调用了 
  <CODE>AC_OUTPUT_COMMANDS</CODE>,在其中给出的命令将紧贴在由本宏给出的命令之前运行。 </P></DD></DL>
<P></P>
<P>
<DL>
  <DT><U>宏:</U> <B>AC_OUTPUT_COMMANDS</B> <I>(<VAR>extra-cmds</VAR> [, 
  <VAR>init-cmds</VAR>])</I> 
  <DD><A 
  name=IDX11></A>指定在<TT>`config.status'</TT>末尾运行的附加的shell命令,以及用于初始化来自于<CODE>configure</CODE> 
  的所有变量的shell命令。本宏可以被调用多次。下面是一个不太实际的例子: 
  <P></P><PRE>fubar=27
AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.], fubar=$fubar)
AC_OUTPUT_COMMANDS([echo this is another, extra, bit], [echo init bit])
</PRE></DD></DL>
<P>如果你在子目录中运行<CODE>make</CODE>,你应该通过使用<CODE>make</CODE>变量<CODE>MAKE</CODE>来运行它。 
<CODE>make</CODE>的大部分版本把<CODE>MAKE</CODE>设置成<CODE>make</CODE>的程序名以及它所需要的任何选项。(但许多版本并没有把在命令行中设定的变量的值包括进来,因此它们没有被自动地传递。)一些老版本的 
<CODE>make</CODE>并不设定这个变量。以下的宏使你可以在这些版本上使用它。 </P>
<P>
<DL>
  <DT><U>宏:</U> <B>AC_PROG_MAKE_SET</B> 
  <DD><A name=IDX12></A><A name=IDX13></A><A 
  name=IDX14></A>如果<CODE>make</CODE>预定义了变量<CODE>MAKE</CODE>,把输出变量<CODE>SET_MAKE</CODE>定义为空。否则,把 
  <CODE>SET_MAKE</CODE>定义成<SAMP>`MAKE=make'</SAMP>。为<CODE>SET_MAKE</CODE>调用<CODE>AC_SUBST</CODE>。 
  </DD></DL>
<P></P>
<P>为了使用这个宏,在每个其他的、运行<CODE>MAKE</CODE>的目录中的<TT>`Makefile.in'</TT>添加一行: </P><PRE>@SET_MAKE@
</PRE>
<H2><A href="http://www.linuxforum.net/books/autoconf.html#TOC11" 
name=SEC11>Makefiles中的替换</A></H2>
<P>发布版本中每个包含了需要被编译或者被安装的文件的目录都应该含有一个文件<TT>`Makefile.in'</TT>, 
<CODE>configure</CODE>将利用它在那个目录中创建一个<TT>`Makefile'</TT>。为了创建<TT>`Makefile'</TT>,<CODE>configure</CODE>进行一个简单的变量替换:用<CODE>configure</CODE> 
为<SAMP>`@<VAR>variable</VAR>@'</SAMP>选取的值,在<TT>`Makefile.in'</TT>中对它们进行替换。按照这种方式被替换到输出文件中的变量被称为<EM>输出变量</EM>。在<CODE>configure</CODE>中,它们是普通的shell变量。为了让<CODE>configure</CODE>把特殊的变量替换到输出文件中,必须把那个变量的名字作为调用 
<CODE>AC_SUBST</CODE>的参数。其他变量的任何<SAMP>`@<VAR>variable</VAR>@'</SAMP>都保持不变。关于使用<CODE>AC_SUBST</CODE>创建输出变量的详情,请参见<A 
href="http://www.linuxforum.net/books/autoconf.html#SEC54">设定输出变量</A>。 </P>
<P>使用<CODE>configure</CODE>脚本的软件应该发布文件<TT>`Makefile.in'</TT>,而不是<TT>`Makefile'</TT>;这样,用户就可以在编译它之前正确地为本地系统进行配置了。 
</P>
<P>关于应该把哪些东西放入<TT>`Makefile'</TT>的详情,请参见<CITE>GNU编码标准</CITE>中的`Makefile惯例'。 </P>
<H3><A href="http://www.linuxforum.net/books/autoconf.html#TOC12" 
name=SEC12>预定义输出变量</A></H3>
<P>有些输出变量是由Autoconf宏预定义的。一部分Autoconf宏设置一些附加的输出变量,这些变量在对这些宏的描述中被说明。关于输出变量的完整列表,参见<A 
href="http://www.linuxforum.net/books/autoconf.html#SEC103">输出变量索引</A>。下面是每个预定义变量所包含的内容。关于变量名以<SAMP>`dir'</SAMP>结尾的变量,参见<CITE>GNU编码标准</CITE>中的 
`为安装目录而提供的变量'。 </P>
<P>
<DL>
  <DT><U>变量:</U> <B>bindir</B> 
  <DD><A name=IDX15></A><A name=IDX16></A>用于安装由用户运行的可执行文件的目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>configure_input</B> 
  <DD><A name=IDX17></A><A 
  name=IDX18></A>一个用于说明文件是由<CODE>configure</CODE>自动生成的,并且给出了输入文件名的注释。 
  <CODE>AC_OUTPUT</CODE>在它创建的每个<TT>`Makefile'</TT>文件的开头添加一个包括了这个变量的注释行。对于其他文件,你应该在每个输入文件开头处的注释中引用这个变量。例如,一个输入shell脚本应该以如下行开头: 

  <P></P><PRE>#! /bin/sh
# @configure_input@
</PRE>
  <P>这一行的存在也提醒了人们在编辑这个文件之后需要用<CODE>configure</CODE>进行处理以使用它。 </P></DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>datadir</B> 
  <DD><A name=IDX19></A><A name=IDX20></A>用于安装只读的与结构无关的数据的目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>exec_prefix</B> 
  <DD><A name=IDX21></A><A name=IDX22></A>与结构有关的文件的安装前缀。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>includedir</B> 
  <DD><A name=IDX23></A><A name=IDX24></A>用于安装C头文件的目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>infodir</B> 
  <DD><A name=IDX25></A><A name=IDX26></A>用于安装Info格式文档的目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>libdir</B> 
  <DD><A name=IDX27></A><A name=IDX28></A>用于安装目标代码库的目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>libexecdir</B> 
  <DD><A name=IDX29></A><A name=IDX30></A>用于安装由其他程序运行的可执行文件的目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>localstatedir</B> 
  <DD><A name=IDX31></A><A name=IDX32></A>用于安装可以被修改的单机数据的目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>mandir</B> 
  <DD><A name=IDX33></A><A name=IDX34></A>用于安装man格式的文档的顶层目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>oldincludedir</B> 
  <DD><A name=IDX35></A><A name=IDX36></A>用于安装由非gcc编译器使用的C头文件的目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>prefix</B> 
  <DD><A name=IDX37></A><A name=IDX38></A>与结构无关的文件的安装前缀。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>sbindir</B> 
  <DD><A name=IDX39></A><A name=IDX40></A>用于安装由系统管理员运行的可执行文件的目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>sharedstatedir</B> 
  <DD><A name=IDX41></A><A name=IDX42></A>用于安装可以修改的、与结构无关的数据的目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>srcdir</B> 
  <DD><A name=IDX43></A><A name=IDX44></A>包含了由<TT>`Makefile'</TT>使用的源代码的目录。 
</DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>sysconfdir</B> 
  <DD><A name=IDX45></A><A name=IDX46></A>用于安装只读的单机数据的目录。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>top_srcdir</B> 
  <DD><A name=IDX47></A><A 
  name=IDX48></A>包的顶层源代码目录。在目录的顶层,它与<CODE>srcdir</CODE>相同。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>CFLAGS</B> 
  <DD><A name=IDX49></A><A 
  name=IDX50></A>为C编译器提供的调试和优化选项。如果在运行<CODE>configure</CODE>时,没有在环境中设置它,就在你调用<CODE>AC_PROG_CC</CODE>的时候设置它的缺省值(如果你没有调用<CODE>AC_PROG_CC</CODE>,它就为空)。 
  <CODE>configure</CODE>在编译程序以测试C的特征时,使用本变量。 </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>CPPFLAGS</B> 
  <DD><A name=IDX51></A><A 
  name=IDX52></A>为C预处理器和编译器提供头文件搜索目录选项(<SAMP>`-I<VAR>dir</VAR>'</SAMP>)以及其他各种选项。如果在运行 
  <CODE>configure</CODE>时,在环境中没有设置本变量,缺省值就是空。<CODE>configure</CODE>在编译或者预处理程序以测试C的特征时,使用本变量。 
  </DD></DL>
<P></P>
<P>
<DL>
  <DT><U>变量:</U> <B>CXXFLAGS</B> 
  <DD><A name=IDX53></A><A 
  name=IDX54></A>为C++编译器提供的调试和优化选项。如果在运行<CODE>configure</CODE>时,没有在环境中设置本变量,那么就在你调用<CODE>AC_PROG_CXX</CODE>时设置它的缺省值(如果你没有调用<CODE>AC_PROG_CXX</CODE>,它就为空)。 
  <CODE>configure</CODE>在编译程序以测试C++的特征时,使用本变量。 </DD></DL>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -