代码之家  ›  专栏  ›  技术社区  ›  Mask

makefile.am和makefile.in是什么?

  •  291
  • Mask  · 技术社区  · 16 年前

    这两个文件主要出现在开源项目中。

    它们的用途是什么,它们是如何工作的?

    4 回复  |  直到 7 年前
        1
  •  342
  •   Emil Laine    11 年前

    Makefile.am 是程序员定义的文件,由 automake 生成 Makefile.in 文件(文件) .am 代表 一 乌托 米 艾克) 这个 configure 通常在源tarballs中看到的脚本将使用 生成文件.in 生成一个 Makefile .

    这个 configure script 它本身是由一个程序员定义的文件生成的,该文件名为 configure.ac 或 configure.in (弃权)我更喜欢 .ac (用于 一 乌托 C onf)因为它将其与生成的 制作文件 文件,这样我就可以有规则,比如 make dist-clean 哪一个跑 rm -f *.in . 因为它是一个生成的文件,所以通常不存储在诸如git、svn、mercurial或cvs之类的修订系统中,而是 交流 文件将是。

    更多阅读 GNU Autotools . 阅读有关 make 和 Makefile 首先,然后了解 automake ,请 autoconf , libtool 等。

        2
  •  43
  •   Ciro Santilli OurBigBook.com    10 年前

    简单实例

    不知羞耻地改编自: http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html 并在Ubuntu 14.04 Automake 1.14.1上进行了测试。

    制作文件

    SUBDIRS = src
    dist_doc_DATA = README.md
    

    读数

    Some doc.
    

    组态AC

    AC_INIT([automake_hello_world], [1.0], [bug-automake@gnu.org])
    AM_INIT_AUTOMAKE([-Wall -Werror foreign])
    AC_PROG_CC
    AC_CONFIG_HEADERS([config.h])
    AC_CONFIG_FILES([
     Makefile
     src/Makefile
    ])
    AC_OUTPUT
    

    src/makefile.am文件

    bin_PROGRAMS = autotools_hello_world
    autotools_hello_world_SOURCES = main.c
    

    SRC/主C

    #include <config.h>
    #include <stdio.h>
    
    int main (void) {
      puts ("Hello world from " PACKAGE_STRING);
      return 0;
    }
    

    用法

    autoreconf --install
    mkdir build
    cd build
    ../configure
    make
    sudo make install
    autoconf_hello_world
    sudo make uninstall
    

    此输出:

    Hello world from automake_hello_world 1.0
    

    笔记

    • autoreconf --install 生成几个应该由git跟踪的模板文件,包括 Makefile.in .它只需要第一次运行。

    • make install 安装:

      • 二进制到 /usr/local/bin
      • README.md 到 /usr/local/share/doc/automake_hello_world

    On GitHub 让你试试看。

        3
  •  13
  •   user966588    11 年前

    reference 以下内容:

    makefile.am——要自动生成的用户输入文件

    configure.in——用户输入文件到autoconf


    autoconf从configure.in生成configure。

    automake从makefile.am创建makefile.in

    configure从makefile.in生成makefile

    对于EX:

    $]
    configure.in Makefile.in
    $] sudo autoconf
    configure configure.in Makefile.in ... 
    $] sudo ./configure
    Makefile Makefile.in
    
        4
  •  9
  •   Elliptical view    7 年前

    开发人员运行这些:

    1) 自动调制解调器 --创建可发货 配置 脚本(安装程序将 运行 使 生成文件 )
    2) 汽车制造商 -创建可发货 制作文件 (哪个) 配置 以后会 阅读 使 生成文件 )

    安装程序运行这些:

    ./configure       # Creates  Makefile        (from     Makefile.in).  
    make              # Creates  the application (from the Makefile just created).  
    
    sudo make install # Installs the application 
                      #   Often, by default its files are installed into /usr/local
    

    输入-gt; 程序 -输出:

    开发人员运行这些:

    configure.in——> 自动调制解调器 -gt; 配置 (脚本)---(配置。 在里面 已折旧。现在使用configure.ac)
    配置.ac-> 自动调制解调器 -> 配置 (脚本)---(*。 交流电 = 一 乌托 C ONF)

    makefile.am-> 汽车制造商 ->生成文件.in----------(*。 是 = 一 乌托邦 米 阿克)

    安装程序运行这些:

    生成文件.in-> 配置 -gt; 生成文件 (* 在里面 = 在里面 放入文件)

    生成文件 -gt; 制作 ->(下载或临时目录中的新软件)
    生成文件 -gt; 制作安装 ->(将新软件放入系统目录)


    “ 自动调制解调器 是一个可扩展的M4宏包,它生成自动配置软件源代码包的shell脚本。这些脚本可以使包适应许多类Unix的系统,而无需手动用户干预。autoconf从一个模板文件为包创建一个配置脚本,该模板文件以m4宏调用的形式列出了包可以使用的操作系统功能。”

    他说:“这是一个很好的选择。” 汽车制造商 是一个自动生成makefile.in文件的工具,符合GNU编码标准。automake需要使用autoconf。”

    手册:


    有趣的事实:
    主要 组态AC 用于构建libreoffice的代码行超过12000行(但子文件夹中还有57个其他configure.ac文件)。
    从这个我产生的 配置 超过41K行代码。
    而 制作文件 和 生成文件 都只有493行代码。
    (但是,子文件夹中还有768个makefile.in。)