Previous: Dependencies, Up: Programs


7.17 実行形式の拡張子のサポート

プラットフォームによっては,Windowsのように実行形式が‘.exe’のよう な拡張子を持つことを期待するものもあります.これらのプラットフォームで は,(GCCを含む)コンパイラは,fooを生成するように依頼されるとき, 自動的にfoo.exeを生成します.

Automakeは,これに対するほとんどの変換でサポートを提供します.残念なが らほとんどとは完全ではないということです.英語の辞書では反対に なりますが,パッケージをこれらのプラットフォームでサポートされるように したい場合,Automakeを補助する必要があります.

気付いていると思われることの一つは,Automakeが以下のような内容に内部で 書き直すことです.

     bin_PROGRAMS = liver

これを以下のようにします.

     bin_PROGRAMS = liver$(EXEEXT)

Automakeが生成するターゲットは,‘$(EXEEXT)’拡張子が与えられたもの になります.EXEEXT

しかし,Automakeがこの書き換えをconfigureの置換式に適用すること は不可能です.そのような置換式を使用しているプログラムを条件付きでビル ドしている場合,出力変数を作成しているときにconfigure.acに ‘$(EXEEXT)’を注意して加えるようにする必要があるということを,これ は意味します.

Autoconf 2.13とそれ以前のものを用いると,このサポートを得るために,明 示的にAC_EXEEXTを使用する必要があります.Autoconf 2.50を用いる と,コンパイラをconfigureする際に(すなわちAC_PROG_CCを通じて), AC_EXEEXTが自動的に実行されます.

それらのプログラムに対し,管理者が明示的にリンクルールを書きたいときも あります.実行形式の拡張子サポートを用いなければ,これは簡単です — ターゲットをプログラム名にしたルールを書くだけです.しかし,実行形式の 拡張子のサポートが利用可能な時は,代わりに‘$(EXEEXT)’接尾辞を加え る必要があります.

残念ながら,Autoconf 2.50の変更のため,常にこの拡張子を加える必要があ ることを,これは意味しています.しかし,パッケージが実行形式の拡張子を 持つプラットフォームで実行されるはずがないことを知っている管理者にとっ て,このことは問題になります.これらの管理者に対しては, no-exeextオプション(see Options)でこの機能が利用不可能にな ります.これは,かなり醜い方法で動作します.no-exeextが見つかっ た場合,Makefile.amfooという名前のターゲットに対するルー ルが存在すると,automekeが生成するfoo$(EXEEXT)に対するルールで 上書きされます.no-exeextオプションが用いなければ,これでエラー が生じます.