gnu构建工具使用总结

autoscan (autoconf): 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。
        configure.scan 
    
aclocal (automake):根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal.m4中。
        aclocal.m4 

autoheader(autoconf): 根据configure.ac中的某些宏,比如cpp宏定义,运行m4,生成config.h.in
        config.h.in 

automake: automake将Makefile.am中定义的结构建立Makefile.in,然后configure脚本将生成的Makefile.in文件转换为Makefile。
    如果在configure.ac中定义了一些特殊的宏,比如AC_PROG_LIBTOOL,它会调用libtoolize,否则它会自己产生config.guess和config.sub
        
    
autoconf:将configure.ac中的宏展开,生成configure脚本。这个过程可能要用到aclocal.m4中定义的宏。
-----------------------------------------------------------------------------------------------------------------------------------------

使用GNU Autotools自动编译项目
    工具:
        autoscan 
        aclocal
        autoheader 
        automake 
        autoconf 
                
    手写脚本:
        Makefile.am 
        configure.ac 
        
    
    整体流程
        (1)创建src目录,将源码放入src目录中
        (2)执行autoscan,生成autoscan.log和configure.scan
        (3)更新configure.scan名为configure.ac(或configure.in),手动编辑configure.ac文件 
        (4)编辑Makefile.am文件 
        (5)建立autogen.sh文件,将aclocal, autohead, automake, autoconf等命令添加到脚本中
        (6)执行autogen.sh 
        (7)执行生成的configure文件,生成Makefile文件
        
    难点:1、没有说清楚configure.ac编辑到底做什么事情
          2、没有说明Makefile.am时生成的还是手动新建的,并且编辑Makefile.am中什么内容,语法格式是什么;
          
    问题:1、执行aclocal没有生成aclocal.m4,只有一个autom4te.cache目录?
            因为configure.ac中缺少对AM_INIT_AUTOMAKE宏的引用
-------------------------------------------------------------------

官方文档地址:https://www.gnu.org/software/automake/manual/automake.html

make目录列表:
    make all
    make install
    make install-strip
    make uninstall
    make clean
    make distclean                    //同时删除configure脚本生成的文件
    make check                        //运行测试套件
    make installcheck                 
    make dist                         //从源码重新生成packge-version.tar.gz文件
    
标准的目录变量                        默认值
    prefix                            /usr/local
    exec_prefix                        ${prefix}
    bindir                            ${exec_prefix}/bin    
    libdir                            ${exec_prefix}/lib 
    
    includedir                      ${prefix}/include 
    datarootdir                        ${prefix}/share 
    datadir                            ${datarootdir}
    mandir                            ${datadir}/man 
    infodir                         ${datadir}/info 
    docdir                            ${datarootdir}/doc/${PACKAGE}
    
标准配置变量
    CC                                C编译命令
    CFLAGS                            C编译器选项
    CXX                                C++编译命令
    CXXFLAGS                        C++编译命令选项
    LDFLAGS                            链接器命令选项
    CPPFLAGS                         C/C++预处理器选项

Makefile.am文件
    可执行文件
        bin_PROGRAMS=foo
        foo_SOURCES=xxx.c 
        foo_LDADD=
        foo_LDFLAGS=
        foo_DEPENDENCIES=
    
    静态库    
        lib_LIBRARIES=libfoo.a
        foo_a_SOURCES=
        foo_a_LDADD=
        foo_a_LIBADD=
        foo_a_LDFLAGS=
        
    
    头文件等,生成文件configure
        include_HEADERS=foo.h
    数据文件
        data_DATA=data1 data2
    
    针对可执行文件和静态库,如果只想编译而不是安装到,使用noinst_PROGRAMS和noinst_LIBRARIES;
    
    全局变量:
        INCLUDES: 链接所需要的头文件
        LDADD    : 链接所需要的库文件
        LDFLAGS : 链接所需要的库文件选项标识
        EXTRA_DIST 
        SUBDIRS    : 在处理本目录之前要递归处理哪些目录
        
    $(top_srcdir)
    $(top_builddir)
        编写Makefile.am文件时,尽可能使用相对路径,
        
    案例:
        bin_PROGRAMS = hello                            # 生成的可执行文件名称.   
        hello_SOURCES = Main.cpp A.h A.cpp B.h B.cpp    # 程序依赖的源文件  
          
          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值