autotoolsソースディレクトリ構成サンプル

autotoolsソースディレクトリ構成

トップディレクトリ配下のsrcディレクトリにソースコードが存在している環境のautotoolsの構築例を記述します。


対象プロジェクト

対象プロジェクトは以下の構成となっています。


$ tree
.
└── src
    ├── common.h
    ├── first.c
    ├── second.c
    └── third.c

サンプルソースコードの内容

common.hの記述は以下の通りです。


#ifndef _COMMON_H_
#define _COMMON_H_
int third_test_call( char *msg );
#endif /* _COMMON_H_ */

first.c の記述は以下の通りです。


#include "common.h"

int
main( int argc, char *argv[] )
{
    third_test_call( "from first" );
    return( 0 );
}

second.cの記述は以下の通りです。


#include "common.h"

int
main( int argc, char *argv[] )
{
    third_test_call( "from second" );
    return( 0 );
}

third.cの記述は以下の通りです。


#include <stdio.h>

int
third_test_call( char *msg )
{
    fprintf( stdout, "%s:%s(%d)\n", __FILE__, __FUNCTION__, __LINE__ );
    fprintf( stdout, "%s\n", msg );
    return( 0 );
}

構築手順

1. Makefile.amの作成


$ touch Makefile.am src/Makefile.am
$ tree
.
├── Makefile.am
└── src
    ├── Makefile.am
    ├── common.h
    ├── first.c
    ├── second.c
    └── third.c

トップディレクトリのMakefile.amはサブディレクトリの指定のみ記述します。


SUBDIRS = src

src/Makefile.amに生成するバイナリファイル名とソースコードを記述します。

内容は下記の通りです。


#
#  Makefile.am for src
#
bin_PROGRAMS = ein zwei

ein_SOURCES =first.c common.h third.c
zwei_SOURCES =second.c common.h third.c

2. configure.acの作成

autoscanコマンドでconfigure.acのテンプレートを作成します。


$ autoscan
$ mv configure.scan configure.ac
$ tree
.
├── Makefile.am
├── configure.ac
└── src
    ├── Makefile.am
    ├── common.h
    ├── first.c
    ├── second.c
    └── third.c

configure.acを編集します。実施事項は下記の2つです。

  • AC_INITにパッケージ名とバージョンと連絡先メールアドレスを記述します。
  • AM_INIT_AUTOMAKEマクロ(内容はパッケージ名とバージョン)を記述します。

ファイル内容は以下のようになります。


$ cat configure.ac 
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.68])
AC_INIT([sample], [1.0], [mail@mail])
AM_INIT_AUTOMAKE([sample], [1.0])
AC_CONFIG_SRCDIR([src/common.h])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile
                 src/Makefile])
AC_OUTPUT

3. autotoolsスクリプトを作成します。

autotools関連コマンドをシェルスクリプトとしてまとめて記述します。


$ touch autotools.sh
$ chmod 755 autotools.sh

内容は下記の通りです。


$ cat autotools.sh
#!/bin/sh
touch INSTALL NEWS README COPYING AUTHORS ChangeLog
autoheader
aclocal
automake --add-missing --copy
autoconf

4. コンパイル実行

ソースコードをコンパイルしてバイナリを作成します。


$ ./autotools.sh
$ ./configure
$ make

以上で実行ファイル「ein」と「zwei」が生成されます。


$ ./src/ein 
third.c:third_test_call(6)
from first
$ ./src/zwei 
third.c:third_test_call(6)
from second

関連ページ