• linux下使用autoconf制作Makefile


    第一步:常用工具安装
    正所谓:“工欲善其事,必先利其器”。我们常用的工具主要有
    GNU Automake
    GNU Autoconf
    GNU m4
    GNU Libtool
    1、查看自己系统中是否安装有这些工具
    终端输入命令:which autoconf
    2、如果没有装则安装
    终端输入命令:sudo apt-get install autoconf

    第二步:自动生成makefile的步骤
      该步骤是一成不变的,需要改变的只是文件里的内容
    1、运行autoscan命令
        扫描源代码以搜寻普通的可移植性问题,比如检查编译器、库、头文件等,生成文件configure.scan,它是configure.ac的一个雏形。

    2、将configure.scan文件重命名为configure.ac。

        按照需要修改configure.ac文件configure.ac文件的内容是一些宏,confiugre.ac调用一系列autoconf宏来测试程序需要的 或用到的特性是否存在,以及这些特性的功能。这些宏经过autoconf处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。configure.ac文件中的宏的顺序并没有规定,但是你必须在文件的最前面和最后面分别加上AC_INIT宏和AC_OUTPUT宏。
    3、执行aclocal命令
        aclocal是一个perl 脚本程序。aclocal根据configure.ac文件的内容,自动生成aclocal.m4文件。
    4、执行autoheader命令
        该命令生成config.h.in文件。该命令通常会从acconfig.h文件中复制用户附加的符号定义。
    5、执行autoconf命令
        有了configure.ac和aclocal.m4 两个文件以后,我们就可以使用autoconf来产生configure文件了。configure脚本能独立于autoconf运行,且在运行的过程中,不需要用户的干预。
    6、在Project目录下新建Makefile.am文件
    7、运行automake  --add-missing命令
        automake会根据Makefile.am文件产生一些文件,其中最重要的是Makefile.in文件。
    8、执行configure生成Makefile。

    第三步:操作示例:Hellocsk.cpp

    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout<<"Hello csk"<<endl;
        return 0;
    }

    1、运行autoscan命令,生成文件列表如下

    -rw-rw-r-- 1 csk csk   0 Nov 23 15:14 autoscan.log
    -rw-rw-r-- 1 csk csk 473 Nov 23 15:14 configure.scan
    -rw-rw-r-- 1 csk csk 100 Nov 23 15:13 Hellocsk.cpp

    2、重命名configure.scan文件为configure.ac,修改configure.ac文件为如下样子

    #                                               -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.
    
    AC_PREREQ([2.69])
    AC_INIT(Hellocsk, 1.0, Chen_shikun@163.com)
    AC_CONFIG_SRCDIR([Hellocsk.cpp])
    AC_CONFIG_HEADERS([config.h])
    AM_INIT_AUTOMAKE(Hellocsk,1.0)
    # 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

    3、执行aclocal命令,生成的文件列表如下:

    -rw-rw-r-- 1 csk csk 39670 Nov 23 15:19 aclocal.m4
    drwxr-xr-x 2 csk csk  4096 Nov 23 15:19 autom4te.cache
    -rw-rw-r-- 1 csk csk     0 Nov 23 15:14 autoscan.log
    -rw-rw-r-- 1 csk csk   512 Nov 23 15:18 configure.ac
    -rw-rw-r-- 1 csk csk   100 Nov 23 15:13 Hellocsk.cpp

    4、执行autoheader命令,生成config.h.in文件,生成的文件列表如下:

    -rw-rw-r-- 1 csk csk 39670 Nov 23 15:19 aclocal.m4
    drwxr-xr-x 2 csk csk  4096 Nov 23 15:20 autom4te.cache
    -rw-rw-r-- 1 csk csk     0 Nov 23 15:14 autoscan.log
    -rw-rw-r-- 1 csk csk   625 Nov 23 15:20 config.h.in
    -rw-rw-r-- 1 csk csk   512 Nov 23 15:18 configure.ac
    -rw-rw-r-- 1 csk csk   100 Nov 23 15:13 Hellocsk.cpp

    5、执行autoconf命令,生成的文件列表如下:

    -rw-rw-r-- 1 csk csk  39670 Nov 23 15:19 aclocal.m4
    drwxr-xr-x 2 csk csk   4096 Nov 23 15:20 autom4te.cache
    -rw-rw-r-- 1 csk csk      0 Nov 23 15:14 autoscan.log
    -rw-rw-r-- 1 csk csk    625 Nov 23 15:20 config.h.in
    -rwxrwxr-x 1 csk csk 135926 Nov 23 15:21 configure
    -rw-rw-r-- 1 csk csk    512 Nov 23 15:18 configure.ac
    -rw-rw-r-- 1 csk csk    100 Nov 23 15:13 Hellocsk.cpp

    6、在Project目录下新建Makefile.am文件,Makefile.am文件的内容如下:

    AUTOMARK_OPTIONS=foreign
    noinst_PROGRAMS=Hellocsk
    HelloWorld_SOURCES=Hellocsk.cpp

    7、运行automake --add-missing命令,就会得到Makefile.in文件。生成的文件列表如下:

    -rw-rw-r-- 1 csk csk  39670 Nov 23 15:35 aclocal.m4
    -rw-rw-r-- 1 csk csk      0 Nov 23 15:38 AUTHORS
    drwxr-xr-x 2 csk csk   4096 Nov 23 15:36 autom4te.cache
    -rw-rw-r-- 1 csk csk      0 Nov 23 15:30 autoscan.log
    -rw-rw-r-- 1 csk csk      0 Nov 23 15:38 ChangeLog
    -rw-rw-r-- 1 csk csk    625 Nov 23 15:34 config.h.in
    -rwxrwxr-x 1 csk csk 135926 Nov 23 15:35 configure
    -rw-rw-r-- 1 csk csk    512 Nov 23 15:35 configure.ac
    lrwxrwxrwx 1 csk csk     32 Nov 23 15:37 COPYING -> /usr/share/automake-1.14/COPYING
    lrwxrwxrwx 1 csk csk     32 Nov 23 15:37 depcomp -> /usr/share/automake-1.14/depcomp
    -rw-rw-r-- 1 csk csk    100 Nov 23 15:30 Hellocsk.cpp
    lrwxrwxrwx 1 csk csk     32 Nov 23 15:37 INSTALL -> /usr/share/automake-1.14/INSTALL
    lrwxrwxrwx 1 csk csk     35 Nov 23 15:37 install-sh -> /usr/share/automake-1.14/install-sh
    -rw-rw-r-- 1 csk csk     80 Nov 23 15:37 Makefile.am
    -rw-rw-r-- 1 csk csk  22023 Nov 23 15:38 Makefile.in
    lrwxrwxrwx 1 csk csk     32 Nov 23 15:37 missing -> /usr/share/automake-1.14/missing
    -rw-rw-r-- 1 csk csk      0 Nov 23 15:38 NEWS
    -rw-rw-r-- 1 csk csk      0 Nov 23 15:38 README

    如果运行automake --add-missing后出现如下提示

    Makefile.am: error: required file './NEWS' not found
    Makefile.am: error: required file './README' not found
    Makefile.am: error: required file './AUTHORS' not found
    Makefile.am: error: required file './ChangeLog' not found

    则运行

    touch NEWS README ChangeLog AUTHORS

    8、执行configure生成Makefile

    9、执行make 生成Hellocsk可执行文件

    10、执行Hellocsk

    csk@ubuntu:~/work/cyg/work$ ./Hellocsk 
    Hello csk
    csk@ubuntu:~/work/cyg/work$ 








    海阔凭鱼跃,天高任鸟飞。
  • 相关阅读:
    2015第18周日
    CreateProcess的使用方法
    A ResourcePool could not acquire a resource from its primary factory or source
    ThreadPool.QueueUserWorkItem的性能问题
    Cucumber 入门一
    菜鸟版JAVA设计模式-从抽象与实现说桥接模式
    ServiceStack.Hello——跨平台.net REST api服务搭建
    android看不见main函数怎么办?程序异常了,能够不提示“xxx软件停止执行”吗?
    深入探讨this指针
    问卷星调查学生对《算法》教学的建议与反馈
  • 原文地址:https://www.cnblogs.com/chenshikun/p/6094089.html
Copyright © 2020-2023  润新知