根据不同的操作系统上,我定义了一个特殊的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_LIBTOOL
当LDFLAGS
传递给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,其中一半以上都是从外部库-我更喜欢从一个中心位置控制这些标志。
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等勾搭,因为用户可能需要在调用“做”,以改变他们。
在命令不修改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=...
仍然是可能的。