===========
autotools
===========

autoconf, automake, (libtool?) のこと?

よくGNUのソフトウェアはtarボールを展開して ./configure && make && make install とかしてインストールできてしまうが,それのこと.

configure.acとMakefile.amとを書くことによりパッケージの自動生成が可能になる.
複数のプラットフォームでMakefileを共通化できる.
これらGNU Autotoolsを活用すれば,簡単に配布用のフリーソフトウェアパッケージを作ることができる.
AutotoolsはそんなGNU流のフリーソフトウェアパッケージの構築を半自動化するための開発者用のツールである.
最終目的はmake distcheck で [パッケージ名]-[version].tar.gz 形式のパッケージが自動生成できるようになること.
Autotoolsは開発者用のツールであって,パッケージのユーザはそのマシンにAutotoolsをインストールする必要はないし,Autotoolsについて知っている必要もない.

移植性の高いビルドを可能にするビルドツール.
Makefileをそのものを生成する.次のような特徴がある.
- 自動的に依存関係を生成
- 複数のプラットホームをカバーしやすい
- デフォルトでclean, install, distなどの標準的なターゲットが生成される

http://loto.sourceforge.net/feram/Autotools-memo.ja.html

環境構築
===========

::

  $ sudo apt install autoconf automake gcc make



Hello World
============

https://www.miraclelinux.com/tech-blog/reqys8

configure.ac

::

  AC_INIT([prog1], [1.0])
  AM_INIT_AUTOMAKE([foreign])
  AC_PROG_CC
  AC_OUTPUT([Makefile]) 

Makefile.am

::

  bin_PROGRAMS = prog1

prog1.c

::

  #include <stdio.h>
  #include "prog1.h"
  
  int main(void) {
    printf("My name is %s.\n", MY_NAME);
    return 0;
  }

prog1.h

::

  #define MY_NAME "prog1"

command

::

  $ autoreconf -i
  $ ./configure
  $ make

  $ make install
  $ make clean
  $ make distclean  # Makefileなど?の広範囲な生成物.このあと再度configureする必要がある.
  $ make dist       # 配布用のtarボールを生成する.








**autotoolsのための.gitignore**: https://github.com/github/gitignore/blob/master/Autotools.gitignore







参考
========

http://loto.sourceforge.net/feram/Autotools-memo.ja.html

https://www.sourceware.org/autobook/

https://cpplover.blogspot.com/2013/07/gnuautotools.html