初学AutoMake

这个东西的战略意义大于实际意义,嗯,还是从一个简单的例子开始作介绍,从写一个自己的HelloWorld程序开始:

  1. 查看自己的automake有木有安装,aclocal --version; autoconf --version; automake --version,没有的话,装一个
  2. 新建一个文件夹test,在该文件夹下写一个hello world的程序
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        cout<<"hello world"<<endl;                                                                                                               
        return 0;
    }
    
    保存为helloWorld.cpp
  3. 执行autoscan,生成一个configure.scan的文件
    文件的内容如下:
    #                                               -*- Autoconf -*-                                                                             
    # Process this file with autoconf to produce a configure script.
    
    AC_PREREQ([2.69])
    AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
    AC_CONFIG_SRCDIR([helloWorld.cpp])
    AC_CONFIG_HEADERS([config.h])
    
    # Checks for programs.
    AC_PROG_CXX
    
    # Checks for libraries.
    
    # Checks for header files.
    
    # Checks for typedefs, structures, and compiler characteristics.
    
    # Checks for library functions.
    
    AC_CONFIG_FILES([Makefile])
    AC_OUTPUT

    现在修改这个文件,简单说说这个文件的前几行:第一行表示autoconf的版本必须达到2.69,第二行需要自己修改一下,第一个参数填写自己想要生成的软件包的名字,这里可以叫做HELLO,第二个参数填写你的软件包的版本,这里填写为1.0,最后一个参数是如果别人使用你的软件,发现bug的报告地址,填上自己的邮箱即可,例如:
    AC_INIT([HELLO], [1.0], [[email protected]]) 
    第三行是代码文件的地址,在这里可以不做修改;第四行是是否生成config.h,会生成一些configure.in生成的宏,只有在需要这些宏的情况下可以保留;
    基本的应用这些就够了,但是我们还需要添加一行:
    AM_INIT_AUTOMAKE(HELLO, 1.0)

    现在修改过后的configure.scan文件大概长得是这样的:
    #                                               -*- Autoconf -*-                                                                             
    # Process this file with autoconf to produce a configure script.
    
    AC_PREREQ([2.69])
    AC_INIT([HELLO], [1.0], [[email protected]])
    AC_CONFIG_SRCDIR([helloWorld.cpp])
    AM_INIT_AUTOMAKE(HELLO, 1.0)
    AC_CONFIG_HEADER([config.h]) 
    # Checks for programs.
    AC_PROG_CXX
    
    # Checks for libraries.
    
    # Checks for header files.
    
    # Checks for typedefs, structures, and compiler characteristics.
    
    # Checks for library functions.
    
    AC_CONFIG_FILES([Makefile])
    AC_OUTPUT

    将configure.scan重命名为configure.in。
  4. 如果header没有注释,需要执行autoheader,否则跳过此步
  5. 书写Makefile.am文件:
    AUTOMAKE_OPTIONS=foreign
    bin_PROGRAMS=HelloWorld
    HelloWorld_SOURCES=helloWorld.cpp
  6. 执行aclocal,完成之后再执行autoconf,最后执行automake --add-missing
  7. 剩下的就和安装GNU的软件过程一样啦,./configure && make

基本的使用就是这样,最后,还能使用make dist命令给自己HelloWorld软件打个包,很有成就感~
后续需要学习构建更为复杂一些的automake,根据多个模块生成自己的软件,且听下回分解。

参考链接:
http://lengjing.iteye.com/blog/919356
http://blog.csdn.net/libaowai/article/details/6676536
http://archive.cnblogs.com/a/188214/
http://tech.sina.com.cn/s/2004-10-19/1115443045.shtml

你可能感兴趣的:(header,File,library,compiler,makefile,output)