automakeを突っ込んで勉強してみる(その5 〜 ビルドおよび実行 〜)

目標

  1. 全体のビルド

トップディレクトリとファイル

 ディレクトリ構造は以下のとおり

test2                         ★ トップディレクトリ
 +- Makefile.am               ★ Makefile
 +- common                    ★ 共通機能
 +- main                      ★ メイン機能
 +- sub                       ★ サブ機能

ファイルの中身

 トップディレクトリで必要なファイルの中身を下記に示す。

Makefile.am

SUBDIRS=common/src main/src sub/src

ビルド方法

 ビルド方法は、以下のとおり。

  1. [autoscan]実行
  2. configure.acの作成
  3. [autoreconf -ivh]実行
  4. [./configure]実行
  5. [make]実行
  6. [make install]実行
  7. LD_LIBRARY_PATHの設定
configure.acの作成

 autoscan の実行で、configure.scanファイルができる。このファイルをリネームして、下記のように編集する。

andre@andre-VirtualBox:~/work/autoreconf/test$ diff configure.scan configure.ac
5,6c5,7
< AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
< AC_CONFIG_SRCDIR([config.h.in])
    • -
> AC_INIT([TEST], [1.0]) > AM_INIT_AUTOMAKE([foreign]) > AC_CONFIG_SRCDIR([common/include/common.h])
LD_LIBRARY_PATHの設定

 動的ライブラリがあるディレクトリをLD_LIBRARY_PATHに設定しなければならない。
(設定前)

 andre@andre-VirtualBox:~/work/autoreconf/test/main/bin$ echo $LD_LIBRARY_PATH
 :/usr/local/lib:/home/andre/local/lib/valgrind:/home/andre/local/lib
 andre@andre-VirtualBox:~/work/autoreconf/test/main/bin$ ldd main
        linux-gate.so.1 =>  (0x00a9a000)
        libsub.so.0 => not found
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
        /lib/ld-linux.so.2 (0x00cbe000)

(設定後)

andre@andre-VirtualBox:~/work/autoreconf/test/main/bin$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/andre/work/autoreconf/test/sub/lib
andre@andre-VirtualBox:~/work/autoreconf/test/main/bin$ ldd main
        linux-gate.so.1 =>  (0x00e41000)
        libsub.so.0 => /home/andre/work/autoreconf/test/sub/lib/libsub.so.0 (0x009db000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00a82000)
        /lib/ld-linux.so.2 (0x00706000)

実行

 ライブラリパスの設定が終われば、mainを実行できる。

andre@andre-VirtualBox:~/work/autoreconf/test/main/bin$ ./main
print_common
print_sub
main