什麼是Makefile.am和Makefile.in?


Answers

簡單的例子

無恥地從以下http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html改編: http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html : http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html並在Ubuntu 14.04 Automake 1.14.1上測試。

Makefile.am

SUBDIRS = src
dist_doc_DATA = README.md

README.md

Some doc.

configure.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 / main.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

在GitHub上為你嘗試一下。

Question

這兩個文件大多在開源項目中看到。

他們是乾什麼用的,他們是如何工作的?




開發人員運行這些:

1) autoconf - 創建裝配的配置腳本(安裝程序將運行Make Makefile
2) automake - 創建可交付的Makefile.in (該配置稍後將讀取以生成Makefile

INSTALLER運行這些:

1)./ configure - 創建Makefile (來自Makefile.in )。
2) make - 創建應用程序(從剛創建的Makefile )。
3) sudo make install - 安裝應用程序 - 默認情況下,文件(經常)安裝到/ usr / local中。

輸入 - > 程序 - >輸出:

開發人員運行這些:

configure.in - > autoconf - > configure (腳本) <----注意! configure.in已折舊。
configure.ac - > autoconf - > configure (script)<---- 現在使用configure.ac /(* .ac = a uto c onf)

Makefile.am - > automake - > Makefile.in /(*。am = a uto m ake)

INSTALLER運行這些:

Makefile.in - > configure - > Makefile (*。 in = put文件中)

Makefile - > make - >(下載或臨時目錄中的新軟件)
Makefile - > make install - >(將新軟件放入系統目錄)

Autoconf是一個可擴展的M4宏包,它可以生成shell腳本來自動配置軟件源代碼包,這些腳本可以在不需要手動用戶干預的情況下將包調整到多種類UNIX系統。模板文件,它以M4宏調用的形式列出程序包可以使用的操作系統功能。“

Automake是一個自動生成符合GNU編碼標準的Makefile.in文件的工具,Automake需要使用Autoconf。”

手冊:

有趣的事實:
用於構建LibreOffice的主要configure.ac超過12k行代碼(但在子文件夾中還有其他57個configure.ac文件)。
從這裡我生成的配置超過了41k行代碼。
Makefile.inMakefile都只有493行代碼。 (但是,子文件夾中還有768多個Makefile.in。)




Links