2011-02-03 2 views
5

두 라이브러리와 테스트 프로그램을 빌드하는 동안 겉으로보기에는 간단한 문제가 발생했습니다.정적 라이브러리 및 SCons에 대한 임시 종속성

문제점 : libA와 libB라는 두 개의 정적 라이브러리가 있고 libA는 libA에 종속되어 있습니다. 나는 명시 적으로 libB를 libA로 사용하는 모든 프로그램을 링크하고 싶지 않습니다. SCons가 프로그램이 라이브러리 B에 링크되어 있으면 라이브러리 A에 링크해야 함을 알았 으면합니다.

이 문제를 설명하는 간단한 예제를 만들었습니다. 나는 적절한 파일 호스팅을 찾을 수 없습니다 이것은 관련 프로그래밍을하기 때문에, 나는 작은 SVN 저장소 생성 :

svn checkout https://example-repository.googlecode.com/svn/trunk example-repository 

또는 당신은 타르볼 here을 다운로드 할 수 있습니다.

답변

4

SCons는 설명대로 전이 라이브러리 종속성을 표현하기위한 지원 기능을 내장하고 있지 않지만 더 어린 사촌 Waf은 지원하지 않습니다. Waf 서적의 "사용"기능은 documentation을 참조하십시오. Boost build system도이 기능이 under a different name입니다. 약간의 파이썬을 작성하고자한다면 SCons에서 직접 구현할 수도 있습니다.

콜백을 구성 변수 (즉, 파이썬 함수 호출을 통해 확장되는 문자열)로 정의하는 기능을 사용할 수 있습니다. 이 함수 호출은 구문 분석 시간에 계산하는 (즉, SConscripts에서 찾을 수있는 메서드 호출을 통해) 어떤 형태의 의존성 그래프를 기반으로 필요한 라이브러리의 전이리스트를 계산하게하고 모든 타겟에 대해 라이브러리의 전체 목록을 반복하지 않아도됩니다 또는 환경.

+0

+1 흥미로운 링크! waf 매뉴얼을 확인해 보겠다. 그러나 내가 본 것에서 이것은 좋은 선택 일 것이다. 다른 한편으로는, 나는 SCons를 가진 몇몇 커스텀 빌더를 이미 구현하기 시작했다 ... – hochl

+0

나의 현재 솔루션은 build 사이에 의존성을 얻는 다른 방법을 찾지 못했기 때문에 의존성 정보를 담고있는 여분의 설정 파일을 기반으로 의존성 그래프를 만든다. 동적으로 대상. – hochl

0

libB 및 libA는 무엇입니까? libs가 하나의 큰 .o이거나 여러 개의 .o 파일로 구성되어 있습니까?

lib가 여러 개의 .o 파일이고 libA의 .o 파일 중 하나를 사용하는 libB의 .o 파일 중 하나에서 함수를 호출하면 libB의 .o 및 종속 libA .o가 나타납니다. libB .o에서 libA의 어떤 것에도 의존하지 않는 함수를 사용하는 경우에는 바이너리에서 libB .o 파일 만 가져옵니다.

따라서, 명령이있는 경우 :

에만 부품이 libB 및 LIBA에서 모두 필요 얻을 것이다
cc -o a.out a.c libA.a libB.a 

.

+0

예제 tarball에서 볼 수있는 것처럼 단순한 개체 파일 만 포함합니다 (게시 끝의 링크 참조). – hochl

관련 문제