次: , 前: maintainer-mode, 上: FAQ


26.3 なぜAutomakeはワイルドカードをサポートしないのですか?

開発者は怠けものです.ファイルの追加,削除,または名前の変更のたびに, Makefile.amの更新を忘れないようにする必要がないよう, Makefile.amでワイルドカードを使用したいときもよくあります.

これにはいくつかの欠点があります.

それらすべてを却下するほとワイルドカードに十分な価値があるという反対意 見があるかもしれませんが,まだ哲学的な欠点もあります.Automakeにワイル ドカードを伝えるためのパッチを書き始める前に,主な技術的な問題を見てい きましょう.それは移植性です.

$(wildcard ...)はGNU makeで動作しますが,他の makeの実装では移植性がありません.

Automakeで$(wildcard ...)をサポートする唯一の方法は, automakeの実行時に$(wildcard ...)を展開することで す.結果として得られるMakefile.inには,$(wildcard ...)が 使用されておらず,すべてのファイルをリストアップしているので移植性があ ります.しかしそれは,ファイルを追加,削除,または名前の変更をするたび に,開発者がautomakeを実行する必要があるということを意味します.

Makefile.amを編集するより,実際は若干勝っています.確かに, emacs Makefile.am; makeと入力するよりautomake; makeと入 力する方が簡単で速いでしょう.しかし,この構文のサポートを追加するのに 十分なパッチを書くことを邪魔する人はいません.Makefile.amや個別 のMakefileの断片にファイルリストを生成するスクリプトを使う人も います.

移植性に気を付けていなくても,GNU Makeだけをターゲットにしていて,なん とかして$(wildcard ...)を使用したい場合でも,処理されるファイル をAutomakeが正確に知っている必要がある場所がたくさんあることを知ってお くべきです.Automakeは$(wildcard ...)を展開する方法を知らないの で,これらの場所で使用することは不可能です.$(wildcard ...)は, Automakeが尊重するAC_SUBSTされている変数と比べてブラックボック スになります.

-Wportabilityフラグを使用すると,$(wildcard ...)の構成物 は警告されるはずです.