zoukankan      html  css  js  c++  java
  • Makefile生成

     安装:sudo yum install automake
    使用:
     1 运行autoscan生成两个文件:autoscan.log和configure.scan。将configure.scan重命名为configure.in。
       修改configure.in文件:

       (1) 将AC_INIT中的参数进行填充,如:AC_INIT(hello,1.0,605841200@qq.com)

       (2) 在#Check for programs注释前增加AM_INIT_AUTOMAKE(packet-name,packet-version),如:AM_INIT_AUTOMAKE(hello,1.0)

       (3) 修改AC_OUTPUT为AC_OUTPUT(Makefile)或新增加AC_CONFIG_FILES(Makefile)

     2 运行aclocal生成aclocal.m4文件和autom4te.cache文件夹

     3 运行autoheader生成config.h.in文件

    当我们的程序要使用一些与平台相关的库时,由于在不同的平台上同样功能的库名字、函数、头文件的不同等,为了使程序具有可移植性,我们经常会在程序中使用
    一大堆的#ifdef或#ifndef预编译指令,这样非常地不方便。而autoheader就是解决这个问题的,在它生成的模板文件
    config.h.in中,为这些库、函数、头文件等定义了#undef宏标志,configure脚本把它转换成config.h后,就会变
    成#define宏标志,用作这些库、函数、头文件的保护符。这样,你可以在程序里包含这个config.h,然后使用其中的某些定义好的常量。

     4 运行autoconf生成configure脚本文件

     5 automake生成Makefile.in文件,需要手动创建Makefile.am后再执行automake --add-missing.
       Makefile.am内容
       AUTOMAKE_OPTIONS=foreign //有三个等级gnu foreign和gnits。
       bin_PROGRAMS=hello
       hello_SOURCES=hello.c

       automake生成Makefile.in文件,添加参数--add-missing,会自动生成(install-sh missing depcomp INSTALL COPYING),

      剩下的NEWS README AUTHORS ChangeLog要自己创建,使用gnu等级时,automake要求你必须拥有这9个文件,它们是

       一个符合GNU规范的代码文件结构所必须的文件。
     6 ./configure生成Makefile文件,configure脚本会使用Makefile.in来创建Makefile文件,使用config.h.in来创建config.h文件,

        并生成一个日志文件config.log。这样就完成了Makefile文件的制作,并且常常具有以下的功能:

         make、 make install、make uninstall、make clean、make distclean、make dist。
     7 make编译源程序,默认执行make all
     8 ./hello看到程序的执行结果
     9 make install可以把程序安装到系统目录中
     10 make clean清除之前所编译的可执行文件及目标文件
     11 make dist 将程序和相关文件打包为一个压缩文档以供发布,如hello-1.0.tar.gz


    使用automake生成动态库
    安装:sudo yum install libtool
    使用环境:c++(src(main.c),fun(Fun.h Fun.c))
     步骤:
     1 在fun目录下新建Makefile.am,内容为
       AUTOMAKE_OPTIONS=foreign
       lib_LTLIBRARIES=libfun.la
       libfun_la_SOURCES=Fun.h Fun.c
     2 在src目录下新建Makefile.am,内容为
       AUTOMAKE_OPTIONS=foreign
       INCLUDES=-I../fun/
       bin_PROGRAMS=main
       main_SOURCES=main.c
       main_LDADD=-L../fun -lfun
        3 在c++目录下运行autoscan生成configure.scan,改名为configure.in并修改其内容
       修改AC_INIT(main,1.0) AC_OUTPUT([Makefile])
       增加AM_INIT_AUTOMAKE AC_PROG_LIBTOOL
     4 运行aclocal
     5 运行libtoolize -f -c
     6 运行autoconf
     7 运行autoheader
     8 在c++目录下新建Makefile.am,内容为
       AUTOMAKE_OPTIONS=foreign
       SUBDIRS=fun src
     9 运行automake -a 会在三个文件夹下均生成Makefile.in文件
     10 在c++目录下运行./configure 生成Makefile文件
     11 运行make,这时候在fun和src目录下就生成了相应的动态链接库和可执行程序了
    使用automake生成静态库
    使用环境同上
    步骤同上。
    差别:改变宏AC_PROG_RANLIB表明生成的是静态库AC_PROG_LIBTOOL表示生成的是动态库
          修改src目录下的Makefile.am中的main_LDADD=../fun/libfun.a
          修改fun目录下的Makefile.am内容为:
       lib_LIBRARIES=libfun.a
       libfun_a_SOURCES=Fun.h Fun.cpp
       执行命令和顺序不变,不再执行libtoolize -f -c

  • 相关阅读:
    11月21日
    11月20日
    11月19日
    11月18日
    11月17日
    11月15日
    图文教程:在Mac上搭建Titanium的iOS开发环境
    经验
    IT术语的正确读法
    NSLog( @"%@", i );
  • 原文地址:https://www.cnblogs.com/zxpo/p/3905153.html
Copyright © 2011-2022 走看看