1

OS に応じてLDFLAGS、configure.acで特別なものを定義します。

AC_CANONICAL_HOST
if test "$host_os" = cygwin
then
    LDFLAGS="$LDFLAGS -Wl,-no-undefined"
    export LDFLAGS
fi
AC_SUBST([LDFLAGS])

パッケージが使用しAC_PROG_LIBTOOLLDFLAGSlibtool に渡されると、-Wlプレフィックスが残り、リンカーはオプションを認識しません。このプレフィックスを削除するとAC_PROG_CXX、GCC が勝手に停止するため、マクロは失敗-no-undefinedします。私は何を間違っていますか?

LDFLAGSについては言及されていませんMakefile.amが、 libtool コマンドで実行することにより、それが尊重されることを確認しましたmake -n

Cygwin 1.7.28(0.271/5/3) で autoconf 2.69、automake 1.14、gmake 4.0、gcc 4.8.2 を使用しています。

編集:私は数十Makefile.amの s を持っていますが、その半分以上は外部ライブラリからのものです。これらのフラグを中央の場所から制御したいです。

4

2 に答える 2

4

libtool には-no-undefinedオプションがあります。

GNU ld には--no-undefinedオプションがあります。

Makefile.am内から libtool に通知し、リンカーへの転送を処理する必要があります。

configure.ac

AC_CANONICAL_HOST
if test "$host_os" = cygwin
then
    EXTRA_LDFLAGS="-no-undefined"
fi
AC_SUBST([EXTRA_LDFLAGS])

Makefile.am

AM_LDFLAGS = $(EXTRA_LDFLAGS) ...

原則として、configure.ac の CPPFLAGS や LDFLAGS などをいじってはいけません。ユーザーが「make」を呼び出すときにそれらを変更する必要があるかもしれないからです。

于 2014-02-18T04:04:41.893 に答える