AutotoolsでconfigureやMakefileの作成

AutotoolsでconfigureやMakefileの作成

2022-01-105 min read

目次

  1. はじめに
  2. 準備
  3. configureac-と-makefileam
  4. configure-makeの生成
  5. その他-makeオプション
  6. autoreconf-について
  7. perlの場合
  8. リンク

はじめに

C/C++で作成したプログラムをLinuxサーバにインストールするためのパッケージ化するために、 Autotoolsを利用して配布形式のパッケージを作成した際のメモです。

Autotools

makeは、C/C++のコンパイルやインストールにおいて依存関係を解決することができるツールです。 AutotoolsはMakefileそのものを自動的に生成するフレームワークです。

Linuxのソフトウェアのインストールでよく行う ./configure && make && make installconfigure を生成します。

環境

以下の環境で実施します。

  • CentOS 8.4

準備

ツール類のインストール

autoconf や automake をインストールします。

dnf -y group install 'Development Tools'

ソースコードの作成

test_appという名前でアプリケーションを作っていきます。

# ホームディレクトリの下にディレクトリを作成
mkdir -p ~/test_app/src
# Cファイルを作成
touch ~/test_app/src/test_app.c

正しく実行すると以下の様な状態になると思います。

~/test_app
└── src
    └── test_app.c

次に~/test_app/src/test_app.cを編集します。

#include <stdio.h>

int main() {
    printf("Hello world!\n");
    return 0;
}

一応、gccでコンパイルできるか確認しておきます。 「Hello world!」と表示されれば問題ないです。

cd ~/test_app/src
gcc test_app.c -o test_app
./test_app

configure.ac と Makefile.am

次に configure.ac と Makefile.am を作成します。

touch ~/test_app/configure.ac
touch ~/test_app/Makefile.am
touch ~/test_app/src/Makefile.am

実行後は以下の様になります。

~/test_app
├── configure.ac
├── Makefile.am
└── src
    ├── Makefile.am
    └── test_app.c

各ファイルを編集します。

~/test_app/configure.ac

# 第一引数はプロジェクト名、第二引数はバージョン
AC_INIT([test_app], [1.0])

# Makefileを作成する定義。
AM_INIT_AUTOMAKE
# foreignが無いとGNUプロジェクトとして作成される
# AM_INIT_AUTOMAKE([foreign]) 

# Cコンパイラを利用する定義
AC_PROG_CC

# 出力ファイルの定義
AC_OUTPUT([Makefile
                 src/Makefile])

~/test_app/Makefile.am

SUBDIRS = src

~/test_app/src/Makefile.am

bin_PROGRAMS = test_app

READMEなどのファイルを作成しておきます。

cd ~/test_app
touch NEWS README AUTHORS ChangeLog

configure Makeの生成

次のコマンドでconfigureやmakeに必要なファイルが生成されます。

autoreconf -vi
# viオプションの意味
# i, --initialization        also trace Autoconf's initialization process
# -v, --verbose             verbosely report processing

これを実行後、ディレクトリ構成は次の様になります。

test_app
├── aclocal.m4
├── AUTHORS
├── autom4te.cache
│   ├── output.0
│   ├── output.1
│   ├── requests
│   ├── traces.0
│   └── traces.1
├── ChangeLog
├── compile
├── configure
├── configure.ac
├── COPYING
├── depcomp
├── INSTALL
├── install-sh
├── Makefile.am
├── Makefile.in
├── missing
├── NEWS
├── README
└── src
    ├── Makefile.am
    ├── Makefile.in
    └── test_app.c

これでconfigureファイルが生成されます。

./configure
# デフォルトだと/usr/localにインストールされる。場所を変更するなら以下
# ./configure --prefix=/path/to/hoge

make
make install

その他 makeオプション

make clean

実行ファイルや中間生成物を削除

make distclean

Makefileなどのconfigureによって生成された生成物を削除

make dist

配布用のソースコード一式であるtarボールを作成する。

autoreconf について

autoreconfは以下の処理をまとめてやってくれる機能と理解。

  • autoscan
  • aclocal
  • automake
  • autoconf

Perlの場合

余談ですが、Perl系のパッケージはconfigureの代わりにMakefile.PLを利用してMakefileを生成します。

これは ExtUtils::MakeMaker で生成することができます。

リンク

Author
githubzennqiita
ただの備忘録です。

※外部送信に関する公表事項