2014-01-29 54 views
2

我寫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同時還建立他們在其他平臺上?

+2

您應該能夠無需任何修改'configure.ac'到'配置在Cygwin(或任何其他平臺) - 禁用shared'。 – ldav1s

+0

的確,但我想--disable-shared是Cygwin的默認值。 –

+0

問題是爲什麼? – Yaakov

回答

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之前出現,可能仍然有效,但此方法會覆蓋任何配置選項。