与libtool的自动工具的使用LDFLAGS(LDFLAGS usage in autotools

2019-10-19 08:32发布

根据不同的操作系统上,我定义了一个特殊的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_LIBTOOLLDFLAGS传递给libtool的,在-Wl前缀保留,并且链接不理解的选项。 如果我删除此前缀,则AC_PROG_CXX宏失败,因为GCC在扼流圈-no-undefined本身。 我究竟做错了什么?

LDFLAGS没有提到的Makefile.am ,但我确信,它是在libtool的命令运行荣幸make -n

我使用的autoconf 2.69,automake的1.14,GMAKE Cygwin的28年7月1日下4.0和gcc 4.8.2(0.271 / 5/3)

编辑:我有几十个Makefile.am S,其中一半以上都是从外部库-我更喜欢从一个中心位置控制这些标志。

Answer 1:

Libtool程序有-no-undefined选项。

GNU ld有--no-undefined选项。

你应该让libtool的了解它从Makefile.am内,并让它照顾转发到连接器:

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) ...

作为一般规则,你不应该CPPFLAGS,LDFLAGS,从configure.ac等勾搭,因为用户可能需要在调用“做”,以改变他们。



Answer 2:

在命令不修改Makefile中几十个,我已经结束了使用LDFLAGS 。 诀窍是后将其设置AC_PROG_CXX宏:

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

这种方式,对于一个C ++编译器成功,因为LDFLAGS是原始测试宏; 但实际的代码库使用额外的标志。

通过将$LDFLAGS替代底,从环境中的任何用户选项需要在配置时优先; 和压倒一切的化妆时间make LDFLAGS=...仍然是可能的。



文章来源: LDFLAGS usage in autotools with libtool