有条件地禁用共享库构建

时间:2014-01-29 01:50:00

标签: cygwin autotools autoconf libtool

我写过a C library that builds using Libtool,我只想在Cygwin上构建静态库。为此,我放置了

if test "$target_os" = "cygwin"; then
    AC_DISABLE_SHARED
fi

在我的configure.ac

这确实禁止在Cygwin上构建共享库;但是,它也禁止在其他地方构建它们。我认为这是因为扩展AC_DISABLE_SHARED会导致一些不幸的副作用。

我如何使用Libtool避免在Cygwin上构建共享库,同时仍在其他平台上构建它们?

1 个答案:

答案 0 :(得分:3)

我不确定$target_os是你想要的。 $host_os是代码将在其上运行的系统的名称。 “目标”三元组很少在构建编译器/工具链之外使用。

即使配置脚本可能仍然对共享库说“是/已启用”,您也可以通过设置enable_shared|static变量来覆盖结果。

AC_CANONICAL_HOST
...
LT_INIT

case $host_os in
  cygwin*)
    AC_MSG_RESULT([explicitly disabled shared libraries for $host])
    enable_shared=no; enable_static=yes ;;
esac

这些变量没有记录,因此技术上是一个黑客攻击 - 但它基本上与任何其他AC_ARG_ENABLE选项一样。如果它出现在LT_INIT之前,您的原始想法可能仍然有效,但此方法会覆盖任何配置选项。