2017-12-08 28 views
0

autotools 빌드 시스템에 prog 실행 프로젝트가 있습니다. 이 프로그램은 자동 도구 프로젝트 인 libfoo과 연결됩니다.Autotools : 타사 라이브러리를 선택적으로 컴파일하고 링크하십시오.

내가 이전에 libfoo 설치에 대해 연결 사이에서 선택 또는 구성, 패키지 내에서 제공되는 libfoo 소스 트리에 컴파일 (정적 링크) 및 링크 자유를 (prog를 컴파일 할) 내 사용자를주고 싶어 (에서 third-party 디렉토리)

libfoolibtoolpkg-config이 중요한 경우에 사용 ... 이상적이 일부 autoconf를 인수와 함께 할 것

:

./configure --with-local-libfoo 

./configure --with-system-libfoo 

문제는 어떻게 libfooprog 전에 (두 번째 경우에) 컴파일하는 방법과 올바른 링크 플래그를 제공하기 위해 buildsystem에게 무엇입니까?

답변

1

libfoo는 Autotools 프로젝트이기도하므로이 프로젝트의 사본은 주 프로젝트 내에 배포되므로 자연스럽게 하위 프로젝트로 설정해야합니다. 여기서 핵심적인 Autoconf 매크로는 AC_CONFIG_SUBDIRS입니다. libfoo 패키지는 최상위 configure 스크립트를 포함하는 디렉토리의 하위 디렉토리 libfoo/에 인 경우에 따라서, 최상위 configure.ac은이 경우

AC_CONFIG_SUBDIRS([libfoo]) 

을 사용, 최상위 구성 스크립트는 libfoo의 구성을 실행 (libfoo에만 의미가있는 것을 포함하여)받은 모든 옵션을 자동으로 전달합니다. 또한, 최상위 스크립트의 --help 옵션은 자체 및 libfoo의 옵션을 모두 인쇄합니다. 이 인수는 --with-* 인수에서 조건부로 지정할 수 있습니다 (단 하나는 두 개의 다른 인수를 사용하지 마십시오).

Automake 측에서 Automake conditionalsconditional subdirectories을 조사하십시오. --with-system-libfoo 등으로 제어되는 조건이있는 조건부를 사용하여 올바른 링크 옵션 집합을 선택하고 make이 libfoo 패키지로 재귀되는지 여부를 결정할 수 있습니다. libfoo의 복사본을 만들 때 주 프로그램의 링크 플래그에 -static-libtool-libs 옵션을 포함시키는 것이 도움이 될 수 있습니다.

마지막 비트는 빌드 할 때 로컬 libfoo가 메인 프로그램과 함께 시스템에 설치되는 것을 방지합니다. libfoo의 빌드 시스템을 조정하지 않아도 좋은 해결책을 찾지 못했습니다. libfoo.la을 편의 라이브러리 (lib_LTLIBRARIES 또는 그 대신에 noinst_LTLIBRARIES)로 바꾸고 실제로 libfoo 서브 패키지의 빌드 대상을 설치된 서브 시스템에서 noinst_ 서브 시스템으로 전환하십시오.