プラットフォームによっては,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.amのfoo
という名前のターゲットに対するルー
ルが存在すると,automekeが生成するfoo$(EXEEXT)
に対するルールで
上書きされます.no-exeext
オプションが用いなければ,これでエラー
が生じます.