使用autotools生成符合自由软件标准的Makefile

    技术2022-05-14  3

    一直以来在开发中我都是使用自己手工编写的简单Makefile进行代码的编译的,编写一个简单的Makefile通常不太复杂,只需要设置一些编译条件的变量,objs列表,加上几行简单的代码即可。但是这样的makefile在很多情况下会暴露出很大缺点,例如在另一个环境的机器上编译等,很可能需要改写Makefile.

     

    使用autotools生成符合自由软件标准的Makefile,就可以帮助我们解决这个问题。我们可以使用像标准的软件包一样的方式进行编译和安装,形式如下:

    ./configure

    make

    make install

     

    下面来总结一下autotools的简单使用:

    autotools是一系列的工具包含aclocal,autoscan,autoconf,autoheader,automake

     

    aclocal用于生成aclocalm4,用于帮助autoconf生成configure

    autoscan 用于生成一个叫做configure.scan的文件,该文件可以作为configure.in的模板

    autoconf 使用aclocalm4和configure.in一起生成configure

    autoheader 负责生成config.h.in文件。该工具通常会从“acconfig.h”文件中复制用户附加的符号定义

    automake 通过他的配置文件Makefile.am和configure.in生成Makefile.in文件

     

    用户最后调用configure来生成Makefile

     

    具体过程如下:

    1、在每个需要生成可执行文件、静态库或动态库的目录中都先加入一个Makefile.am文件,作为automake的配置文件

    内容需要如下:

    AUTOMAKE_OPTIONS=foreign   #foreign/gnu/gnits软件等级foreign表示只检查必须的文件,gnu是默认等级

    bin_PROGRAMS= 生成目标名称    #bin_PROGRAMS表示可执行文件,noinst_LIBRARIES表示静态库不需要make install,lib_LTLIBRARIES表示动态库

    生成目标名称_SOURCES= 所需的源文件,多个文件用空格分开

     

    2、执行autoscan生成configure.scan,将其重命名为configure.in并对内容进行如下修改:

    #                                               -*- Autoconf -*-

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

    AC_PREREQ(2.59)      #这里是autoconf所需的版本

    #The next one is modified by sunq

    AC_INIT(软件包的全称,版本,[提交bug的邮箱])

    # The next one is added by sunq

    AM_INIT_AUTOMAKE(软件包的全称,版本)

    AC_CONFIG_SRCDIR([需要检查的源文件])  #每个文件写一条

    AC_CONFIG_HEADER([需要检查的头文件]) #每个文件写一条

    # Checks for programs.

    AC_PROG_CC   #需要有gcc

    AC_PROG_GXX #需要有g++

    # Checks for libraries.        #检查所需的lib是否走存在

    # Checks for header files.  #检查所需的头文件是否存在

    # Checks for typedefs, structures, and compiler characteristics.

    # Checks for library functions.

    AC_PROG_LIBTOOL            #如果是编译库需要加上这条

    AC_CONFIG_FILES([Makefile])

    AC_OUTPUT

     

    3、接下来执行aclocal

     

    4、执行autoconf

     

    5、执行automake --add-missing

     

    如果上面的两个配置文件都没写错的话,就可以生成正确的configure和Makefile.in了

     

    6、执行./configure生成Makefile

     

    这样就大功告成


    最新回复(0)