• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用autoconf生成Makefile并编译工程的步骤

    前言

    在Linux下,编译和链接需要用Makefile,而写好一个Makefile可不容易,写出一个规范的Makefile更是麻烦。我们可以利用autoconf来生成一个Makefile,尤其在大型工程里,能省去很多麻烦。

    这里我会用一个工程来说明怎么做,有一些步骤不是必须的,但是如果你看不出来哪些步骤不是必须的,最好跟着一步步走,因为某些步骤省略了,代码也需要做出相应修改(如修改路径等)。

    步骤

    首先安装autoconf

    sudo apt-get install autoconf

    新建一个项目文件夹(例如:joy)

    mkdir joy

    cd joy

    在里面新建两个文件夹 lib 和 src ,用于放工程的库文件和源文件。

    mkdir lib

    mkdir src

    如下图所示:

    进入lib文件夹,新建一个头文件,如:haha.h,随便声明个函数吧。

    cd lib

    gedit haha.h

    //haha.h
    #include <stdio.h>
    void printhaha();

    进入src文件夹,新建一个C文件,如:haha.c,实现头文件的函数;新建一个C文件,如:main_code.c,编写主函数。

    cd ../src

    gedit haha.c

    //haha.c
    #include "../lib/haha.h"
    void printhaha()
    {
      printf("haha\n");
    }
    //main_code.c
    #include "../lib/haha.h"
    void main()
    {
      printhaha();
    }

    回到joy文件夹下,我们的工程文件都已经写好了

    cd ..

    运行autoscan生成configure.scan

    autoscan

    编辑configure.scan

    gedit 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([src/haha.c])
    AC_CONFIG_HEADERS([config.h])
    # Checks for programs.
    AC_PROG_CC
    # Checks for libraries.
    # Checks for header files.
    # Checks for typedefs, structures, and compiler characteristics.
    # Checks for library functions.
    AC_OUTPUT

    前缀AC指的是 AutoConf
    AC_PREREQ不用管
    AC_INIT里面填【包名】【版本】【BUG提交地址 也就是你的邮箱】
    AC_CONFIG_SRCDIR里填源文件路径下的任意一个文件名,autoconf通过检测这个文件是否存在,判断这个路径是否正确,一般不用管
    AC_CONFIG_HEADERS不用管
    插入下面这句,automake阶段需要,否则会报错
    AM_INIT_AUTOMAKE
    前缀AM指的是 AutoMake
    最后的AC_OUTPUT,改为AC_OUTPUT(Makefile)
    修改完之后的文件如下所示:

    #修改后的文件
    #                        -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.
    AC_PREREQ([2.69])
    AC_INIT(hhh, 1.0, idontknow@666.com)
    AC_CONFIG_SRCDIR([src/haha.c])
    AC_CONFIG_HEADERS([config.h])
    AM_INIT_AUTOMAKE  
    # Checks for programs.
    AC_PROG_CC
    # Checks for libraries.
    # Checks for header files.
    # Checks for typedefs, structures, and compiler characteristics.
    # Checks for library functions.
    AC_OUTPUT(Makefile)

    保存,并将configure.scan重命名为configure.ac

    新建Makefile.am

    gedit Makefile.am

    输入以下代码

    AUTOMAKE_OPTIONS= \
    
      foreign \
    
      subdir-objects
    bin_PROGRAMS=test_prj 
    test_prj_SOURCES= \
    
      lib/haha.h \
    
      src/haha.c \
    
      src/main_code.c

    AUTOMAKE_OPTIONS后面是automake的执行选项,用空格隔开;
    foreign指的是只检测必须的文件;
    subdir-objects指的是编译生成的.o文件可以放在子路径(跟源文件放一起),没有这个选项的话,所有.o文件都会放在工程根目录下;
    bin_PROGRAMS 后面的名字是 生成的可执行二进制文件名
    可以有多个 bin_PROGRAMS ,但每个 bin_PROGRAMS 都需要有相对应的 xxx_SOURCES ;
    xxx_SOURCES 是 可执行文件xxx的依赖项,包括头文件,源文件等

    用aclocal生成aclocal.m4文件

    aclocal

    用autoconf生成configure文件

    autoconf

    用autoheader生成config.h.in

    autoheader

    用automake生成Makefile.in,需要加上 –add-missing使其自动加上缺省文件

    automake --add-missing

    然后我们这个软件就做好了,可以整个包拿去上传github或者开源论坛了。

    别人下载了我们的源码包之后怎么编译链接可执行文件呢?或者说我们怎么编译链接我们的可执行文件呢?

    以下是源码安装的一般步骤,也是我们编译链接的步骤

    首先生成Makefile

    ./configure

    然后make

    make

    现在我们可以看见,可执行文件 test_prj 已经被生成出来了

    运行一下,结果如下:

    结果是正确的。

    进入src目录下,我们发现多了两个文件


    这就是AUTOMAKE_OPTIONS里subdir-objects的作用,少了这句话,这两个.o文件就会出现在你的根目录下。如果很不幸你的工程比较大,有同名文件的话,那就可能出现很严重的后果了,所以这句话建议加上。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    上一篇:Tomcat默认程序发布路径的使用与修改方法讲解
    下一篇:linux之centos7防火墙基本使用详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    使用autoconf生成Makefile并编译工程的步骤 使用,autoconf,生成,Makefile,