• 2007-05-22

    autotoolset使用(2) - [GNU]

    关于两个主要文件的语法

    1.

    configure.ac 文件是m4的宏,并且也可以使用shell脚本语言 if else fi 等。configure.ac 中几个主要的宏:

    //////////////////////////////////////////////////////////////////////

    `AC_INIT(PACKAGE, VERSION, BUG-REPORT-ADDRESS)'
    information on the package
    checks for programs
    checks for libraries
    checks for header files
    checks for types
    checks for structures
    checks for compiler characteristics
    checks for library functions
    checks for system services
    `AC_CONFIG_FILES([FILE...])'
    `AC_OUTPUT'

    ///////////////////////////////////////////////////////////////////////

    AC_INIT(NAME,version,email): 指定相应打包文件的名和版本 如 name-version.tar.gz

    AC_CONFIG_SUBDIR(sourcefile): 参数sourcefile 一般是你的主程序

    AM_INIT_AUTOMAKE

    AC_PROG_CC,AC_PROG_CXX,AC_PROG_YACC,AM_PROG_LEX: 指定使用的编译器。

    AC_CONFIG_HEADER(files): 指定配置的头文件(autoheader 生成 file.in)

     

    AC_CHECK_FUNCS/FUNC ,AC_CHECK_LIB,AC_HEADER_STDC,AC_CHECK_HEADER: 指定要检查的函数,包 ,标准头文件,头文件。 指定后运行 autoheader 会生成相应 #define

    AC_MSG_ERROR,AC_MSG_WARNING: 给出相应的错误信息

    AC_ARG_ENABLE(feature,help-string,[a],[b]]) a=action if given b=action if not given : 判断配置是否用了 --enable-feature

    AC_PROG_INSTALL : 指定要安装包
    AC_CONFIG_FILES([Makefile]) : 指定各目录的Makefile文件
    AC_OUTPUT : 结束

    由于configure.ac文件与shell脚本相同,应此可以定义相应的变量,测试等等。其中

    VERSION="0.0.1-rc2"
    AC_SUBST(VERSION) // 在Makefile.am中 @VERSION@ 将会被替换

    AM_CONDITIONAL(name ,value) 指定条件变量,name 可以在Makefile中通过 if else fi 来使用

    // configure.ac 中的注释可以是# 或者 dnl

    2.

    Makefile.am 中的一些变量

    SUBDIRS=dir1 dir2 dir3 : 指定编译进入的子目录,以及顺序

    LDADD = -llibname1 -llibname2 : 指定ld的link库

    LDFLAGS= -Ldir1 -Ldir2 : 指定ld的link目录

    INCLUDES= -I dir1 -I dir2 : 指定编译器的头文件目录

    AM_CFLAGS= xxxx : 指定 编译器的选项c++ AM_CXXCFLAGS ->c

    对于每个程序

    bin_PROGRAMS=prog1,prog2 (注意Makefile.am 只需指定一个)

           prog1_SOURCES = foo1.cc foo2.cc ... header1.h header2.h ....
    prog1_LDADD = -lbar1 -lbar2 -lbar3
    prog1_LDFLAGS = -L/dir1 -L/dir2 -L/dir3 ...
    prog1_DEPENDENCIES = dep1 dep2 dep3 ...

    对于每个库

    lib_LIBRARIES = ... libfoo1.a ...
    libfoo1_a_SOURCES = foo1.cc foo2.cc private1.h private2.h ...
    libfoo1_a_LIBADD = obj1.o obj2.o obj3.o
    libfoo1_a_DEPENDENCIES = dep1 dep2 dep3 ...

    EXTRA_DIST : 需要被编译进包的指定文件

    include_HEADERS, man_MANS, info_TEXINFOS,bin_SCRIPTS,指定相应的文件到系统的相应地方

    pkgdata_DATA: 安装文件到 %prefix%/share/program 一般是资源文件

    EXTRA_DIST and noinst_HEADERS :指包括在版本中,但是不安装

    Makefile.am 中可以定义变量如LIBS 当编译的库依赖其他库是可以定义此变量,可以写条件语句


     

     

     

     


    历史上的今天:


    收藏到:Del.icio.us