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 で生成することができます。

リンク

Tags
javascript(110)
node.js(54)
linux(54)
amazon%20aws(47)
typescript(45)
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0(36)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86(30)
html5(29)
php(24)
centos(24)
python(22)
%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0(21)
mac(21)
mysql(20)
canvas(19)
opencv(17)
%E9%9B%91%E8%AB%87(16)
docker(16)
wordpress(15)
atcoder(14)
apache(12)
%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92(12)
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9(12)
amazon%20s3(12)
red%20hat(12)
prisma(12)
ubuntu(11)
github(10)
git(10)
vue.js(10)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86100%E6%9C%AC%E3%83%8E%E3%83%83%E3%82%AF(10)
mariadb(10)
react(9)
aws%20cdk(9)
css3(8)
%E5%8F%AF%E8%A6%96%E5%8C%96(8)
%E5%B0%8F%E3%83%8D%E3%82%BF(8)
nestjs(8)
amazon%20lightsail(7)
next.js(7)
%E3%83%96%E3%83%AD%E3%82%B0(6)
cms(6)
oracle(6)
perl(6)
gitlab(6)
iam(5)
amazon%20ec2(5)
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93(5)
aws%20amplify(5)
curl(4)
Author
githubzennqiita
ただの備忘録です。

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