Linux下automake软件编译与发布快速入门


本例假设要产生一个simserver1的软件包,源文件只有1个,simserver1.cpp.使用了pthread库。

    1.运行autoscan扫描源码目录

    执行

    $autoscan

    执行后生成configure.scan.

    2.编辑configure.in文件

    步骤1执行后生成了configure.scan,本步骤需要复制一份该文件并命名为configure.in,然后编辑该文件。

    命令如下:

    $cp configure.scan configure.in

    $vim configure.in

    用vim编辑器打开后,文件原内容如下:

    configure.scan开始

    # -*- Autoconf -*-

    # Process this file with autoconf to produce a configure script.

    AC_PREREQ(2.61)

    AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

    AC_CONFIG_SRCDIR([simserver1.cpp])

    AC_CONFIG_HEADER([config.h])

    # Checks for programs.

    AC_PROG_CXX

    # Checks for libraries.

    # FIXME: Replace `main' with a function in `-lpthread':

    AC_CHECK_LIB([pthread], [main])

    # Checks for header files.

    AC_CHECK_HEADERS([arpa/inet.h netinet/in.h sys/socket.h])

    # Checks for typedefs, structures, and compiler characteristics.

    # Checks for library functions.

    AC_HEADER_STDC

    AC_CHECK_FUNCS([bzero inet_ntoa socket])

    AC_CONFIG_FILES([Makefile])

    AC_OUTPUT

    configure.scan结束

    编辑修改成如下内容:

    configure.in开始

    # -*- Autoconf -*-

    # Process this file with autoconf to produce a configure script.

    AC_INIT(simserver1.cpp) #这个宏用来检查源代码所在的路径,放在文件开头

    AM_INIT_AUTOMAKE(simserver1,1.0)   #描述软件包名称及版本号

    # Checks for programs.

    AC_PROG_CXX #使用C++

    # Checks for libraries.

    # Checks for header files.

    AC_CHECK_HEADERS([arpa/inet.h netinet/in.h sys/socket.h])

    # Checks for typedefs, structures, and compiler characteristics.

    # Checks for library functions.

    AC_HEADER_STDC

    AC_CHECK_FUNCS([bzero inet_ntoa socket])

    AC_OUTPUT(Makefile) #这个宏是我们要输出的Makefile的名字

    configure.in结束

    3.运行aclocal生成aclocal.m4文件

    configure.in文件编辑保存完后,用aclocal命令生成aclocal.m4文件。

    执行以下命令:

    $aclocal

    然后用ls列出生成的文件。如果没有找到aclocal.m4文件,那一般是configure.in文件不对,修改后再重试。

    4.运行autoconf生成configure文件

    用autoconf命令来生成configure可执行文件。

    执行以下命令:

    $autoconf

    然后用ls检查configure是否已经成功生成。

    5.建立Makefile.am文件

    Makefile.am是用来生成Makefile.in的,需要你手工书写。Makefile.am中定义了一些内容:

    AUTOMAKE_OPTIONS

    这个是automake的选项。在执行automake时,它会检查目录下是否存在标准GNU软件包中应具备的各种文件,例如AUTHORS、ChangeLog、NEWS等文件。我们将其设置成foreign时,automake会改用一般软件包的标准来检查。

    bin_PROGRAMS

    这个是指定我们所要产生的可执行文件的文件名。如果你要产生多个可执行文件,那么在各个名字间用空格隔开。

    helloworld_SOURCES

    这个是指定产生“helloworld”时所需要的源代码。如果它用到了多个源文件,那么请使用空格符号将它们隔开。比如需要 helloworld.h,helloworld.c那么请写成helloworld_SOURCES= helloworld.h helloworld.c.

    如果你在bin_PROGRAMS定义了多个可执行文件,则对应每个可执行文件都要定义相对的filename_SOURCES.

    LIBS

    这个用来指定链接的程序库。如LIBS += -lpthread,指定链接pthread库。

    执行命令:

    $vim Makefilemam

    进入编辑界面,输入内容如下:

    AUTOMAKE_OPTIONS=foreign

    bin_PROGRAMS=simserver1 #软件包名称

    simserver1_SOURCES=simserver1.cpp  #源文件列表,如果有多个则用空格分开

    LIBS += -lpthread #链接pthread库

    6.运行automake

    执行automake ——add-missing来产生Makefile.in.

    $automake ——add-missing

    执行后应该生成Makefile.in文件。

    7.运行configure生成Makefile

    执行:

    $./configure

    8.执行make生成可执行文件

    $make

    执行后应该编译输出simserver1可执行文件。

    make还有以下几个命令:

    make install可以将simserver1安装到/usr/local/bin目录下;

    make clean可清除上次编译结果

    make dist可将代码打包成packagename-ver.tar.gz文件

    make distcheck用来检查打包的软件包是否正常。

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3