首页 > 编程知识 正文

autoconf安装,linux版是什么意思

时间:2023-05-05 05:00:24 阅读:49351 作者:1810

1、工具的安装

在开始使用autoconf和automake之前,首先确保您的系统上安装了以下GNU软件: automake/autoconf/m4/perl。

如果需要生成“共享库”,则还需要GNU Libtool。

使用Linux版本的RedHat时,这些工具将自动安装。 我在考试中用SUSE11安装了所有的程序。

autoconf是一个shell脚本工具,可自动配置软件包以支持各种UNIX系统。 由autoconf生成的配置脚本在运行时不需要用户手动操作。 通常,您甚至不需要手动指定参数来确定系统类型。 其中,autoconf需要m4,便于脚本的生成。

automake :从文件Makefile.am自动生成Makefile.in的工具。 每个Makefile.am基本上是一系列make的宏观定义。 生成的Makefile.in遵循GNU Makefile标准。 为了生成Makefile.in,automake还需要perl (本身就是perl程序)。

2、使用流程

)1)使用autoscan命令从您的源文件生成configure.scan文件,修改configure.scan文件,然后将其重命名为configure.in。

configure.in文件的内容是宏,这些宏经过autoconf处理后将成为shell脚本,用于检查系统特性、环境变量和软件所需的参数。

虽然configure.in文件中的宏顺序尚未确定,但必须在所有宏的开头和结尾分别添加AC_INIT宏和AC_OUTPUT宏。

)2)通过aclocal命令,从configure.in生成aclocal.m4

(3)根据autoconf命令,生成configure

)4)编辑每个Makefile.am文件,并使用automake --add-missing命令生成Makefile.in文件。

)5)运行configure命令,从Makefile.in文件生成Makefile

3、如何修改配置. in文件

am _ init _ automake (包,版本) ) )。

这是使用Automake所需的宏,其中PACKAGE是要生成的软件的名称,VERSION是版本号。 也可以将软件包和版本号等信息放入AC_init(file )宏中。

AC_PROG_CC :检查系统中可用的c编译器

AC_PROG_RANLIB :如果需要生成静态库,则必须添加此语句

AC_PROG_LIBTOOL :如果需要生成动态库,请添加此语句以指示libtool将自动生成动态库

4、如何创建makefile.am文件

makefile.am文件要求定义要生成的目标。 具体情况如下:

automake _ options :设置automake选项。 automake主要由帮助开发GNU软件的人员维护软件工具包。 通常,运行automake时,会检查目录中是否存在标准GNU工具包所需的文件,例如NEWS、AUTHOR、ChangeLog等。 如果设置为foreign,automake将按常规软件工具包标准进行检查,但GNU是默认设置

的手册_PROGRAMS :定义要生成的执行文件的名称。 生成多个可执行文件时,必须用空格分隔。

hello _ sources :定义名为hello的可执行文件的源文件。 如果此过程由多个原始文件生成,则必须列出要使用的原始文件,用空格分隔。 例如,hello _ sources=hello.cmain.chello.h。 如果定义了多个可执行文件,则必须为每个可执行文件定义相对的filename_SOURCES。

示例:

noinst_LIBRARIES=libhello.a

libhello_a_SOURCES=test.c

AUTOMAKE_OPTIONS=foreign

第一行中的noinst表示生成的是静态库。 如果要在其他位置生成静态库,可以在=之后添加路径。

第二行表示用于生成静态库的源文件。

第三行中的AUTOMAKE_OPTIONS是Automake的选项。

AUTOMAKE_OPTIONS=foreign

lib_LTLIBRARIES=libhello.la

libhello_la_SOURCES=test.c

在这里使用la的话,就会生成动态库

AUTOMAKE_OPTIONS=foreign

INCLUDES=-I./include

幽默的指甲油_PROGRAMS=hello

hello_SOURCES=hello.c

hello_LDADD=./lib/libhello.a

第二行指定头文件的位置。 -I是id

irafter 的缩写。

第三行指定生成可执行文件名hello,在这里可执行文件生成在src 下,如需要把可执行文件生成到/root/test 目录下。

写法为:风趣的指甲油_PROGRAMS=/root/test/hello,后面的第四、五行也相对应地变为:

_root_test_hello_SOURCES=hello.c

_root_test_hello_LDADD=../lib/libhello.a

第四行指定生成可执行文件hello 的源代码文件

第五行指定需要使用静态库的位置。

5、产生的Makefile结构

利用 configure 所产生的 Makefile 档有几个预设的目标可供使用,我们只拿其中几个简述如下:

make all

产生我们设定的目标,即此范例中的执行档。只打 make 也可以,此时会开始编译原始码,然後连结,并且产生执行档。

make clean

清除之前所编译的执行档及目的档 (object file, *.o)。

make distclean

除了清除执行档和目的档外,也把 configure 所产生的 Makefile 也清除掉。

make install将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的执行档存放路径。如果我们用风趣的指甲油_PROGRAMS 巨集的话,程序会被安装至 /usr/local/风趣的指甲油 这个目录。

make dist将程序和相关的档案包装成一个压缩档以供散播 (distribution) 。执行完在目录下会产生一个以 PACKAGE-VERSION.tar.gz 为名称的档案。PACKAGE 和 VERSION 这两个变数是根据 configure.in 档中AM_INIT_AUTOMAKE(PACKAGE, VERSION) 的定义。在此范例中会产生'hello-1.0.tar.gz' 的档案。

make distcheck和 make dist 类似,但是加入检查包装後的压缩档是否正常。这个目标除了把程序和相关档案包装成 tar.gz 档外,还会自动把这个压缩档解开,执行 configure,并且进行 make all 的动作,确认编译无误後,会显示这个 tar.gz 档已经准备好可供散播了。这个检查非常有用,检查过关的套件,基本上可以给任何一个具备 GNU 发展环境的人去重新编译。

6、其他

其它有关开发 GNU 程序或 C 程序设计及 Makefile 的详细运用及技巧,建议从 GNU Coding Standards3 (GNU 编码标准规定) 读起,里面包含了 GNU Makefile 惯例,还有发展 GNU 软体套件的标准程序和惯例。这些 GNU 软体的线上说明文件可以在 http://www.gnu.org/ 这个网站上找到。

7、我的经验

(1)config.status: WARNING: 'Makefile.in' seems to ignore the --datarootdir setting;基本上是操作顺序的错误

(2)编译错误:libtool: line 813: X--tag=CC: command not found

google了半天,终于找到这个:

../libtool: line 763: X–tag=CC: command not found

The libtool on your host computer is causing the problem (using $(echo) when it is not defined). Either install an older libtool version (1.5.26) or define the echo environment variable.只需要:export echo=echo

(3)configure.in:56: warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS

删除掉自动的检测配置,删除掉临时文件。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。