AC_LIBOBJ
対LIBOBJS
Autoconf 2.13までは,関数の置換は変数LIBOBJS
で開始されていました.
Autoconf 2.50からは,マクロAC_LIBOBJ
を代わりに使用すべきです
(see Generic Functions).Autoconf 2.53からは,LIBOBJS
の使用は
エラーになります.
この変更は,GNUビルドシステムの構成要素から要求されました.特
に,configure.acのパースで使用される様々な壊れやすいテクニックは,
すべてトレースを使用することで置換されます.結果として,すべての動作をト
レース可能にする必要があり,それでクリティカルな変数の代入は時代遅れにな
ります.幸運にもLIBOBJS
だけが問題となっていて,それは美しく処理す
ることが可能です(“何も変更する必要はない”ということです).
典型的なLIBOBJS
の使用方法は二つありました.関数の置換を依頼するこ
とと,Automakeそして/またはLibtoolに対するLIBOBJS
を調整することで
す.
関数の置換に対しては,修正はすぐにできます.
AC_LIBOBJ
を使用してく
ださい.例えば,以下を考えます.
LIBOBJS="$LIBOBJS fnmatch.o" LIBOBJS="$LIBOBJS malloc.$ac_objext"
以下で置換すべきです.
AC_LIBOBJ([fnmatch]) AC_LIBOBJ([malloc])
自動的なde-ANSI-ficationが依頼されたとき,Automakeは,`$U'をベース ファイル名に追加するために
LIBOBJS
されたファイル名が必要です.
Libtoolは,接尾子が`.lo'になっているLTLIBOBJS
の定義が必要で
す.人々は,以下のような断片を実行していました.
# This is necessary so that .o files in LIBOBJS are also built via # the ANSI2KNR-filtering rules. LIBOBJS=`echo "$LIBOBJS" | sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'` LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.o/\.lo/g'` AC_SUBST(LTLIBOBJS)
`.o'が拡張子ではない可能性があるので,このコードが間違ってい ることに注意してください1! 以下のように読み換えてください.
# This is necessary so that .o files in LIBOBJS are also built via # the ANSI2KNR-filtering rules. LIB@&t@OBJS=`echo "$LIB@&t@OBJS" | sed 's,\.[[^.]]* ,$U&,g;s,\.[[^.]]*$,$U&,'` LTLIBOBJS=`echo "$LIB@&t@OBJS" | sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'` AC_SUBST(LTLIBOBJS)
もやはこれを使用する必要がありません.
AC_OUTPUT
はLIBOBJS
とLTLIBOBJS
を正規化します(そのため,あらゆるバージョンのAutomake
とLibtoolで動作します).この行を削除してください(これはマクロではないの
で,autoupdateでこの作業を行なうことは不可能です).
U
をMakefileで使用する必要はありません.