2014-01-29 3 views
2

나는 을 작성했으며 Cygwin에서만 정적 라이브러리를 빌드하려고합니다. 이를 위해조건부로 공유 라이브러리 빌드 사용 안 함

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

을 내 configure.ac에 넣었습니다.

사실 Cygwin에서 공유 라이브러리를 빌드 할 수 없습니다. 그러나, 그것은 또한 그 밖의 모든 곳에서 건물을 짓지 못하게합니다. AC_DISABLE_SHARED을 확장하면 불행한 부작용이 생기기 때문에 이것이라고 가정합니다.

Cytwin에서 공유 라이브러리를 빌드하지 않고도 Libtool을 사용하여 다른 플랫폼에서 빌드하는 것을 방지하려면 어떻게해야합니까?

+2

'configure.ac'를 수정하지 않고 Cygwin (또는 다른 플랫폼)에서'configure --disable-shared'를 할 수 있어야합니다. – ldav1s

+0

실제로 Cygwin에서는 --disable-shared를 기본값으로 사용하고 싶습니다. –

+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 전에 나타나면 원래 아이디어가 계속 작동 할 수 있지만이 방법은 모든 구성 옵션보다 우선합니다.