2010-12-27 4 views
4

나는 명령 줄에서 옵션을 처리하기 위해 boost/program_options을 사용하는 작은 프로그램을 작성 중이다. 이제 Boost가 설치되지 않은 시스템에 코드를 배포하고 싶습니다. 그래서 bcp 유틸리티를 사용했습니다.왜 bcp는 boost_program_options에 대한 큰 종속성 목록을 계산합니까?

bcp --scan --boost=/users2/xxx/boost_1_45_0 ~/prova/first.cpp dest 

그것은 .hpp.cpp 파일의 톤과 디렉토리 dest를 만들 : 나는 program_options tutorial에서 example/first.cpp라고 부스트의 예에 그것을 시도. 나는 이것이 내가 필요로하는 것 이상이라고 생각한다. 맞았 어? 때문에 :

du -hs dest 
37M dest 

너무 많이 37M 아닌가? 예를 들어, 파이썬을 사용하여 6130KB의 test_optparse.py으로 동일한 작업을 수행 할 수 있습니다.

내가 잘못 했나요? 요점은 내 소스 프로그램이 4MB 밖에되지 않는다는 것입니다. 37MB의 제 3자를 추가 할 수 없습니다 !!

+0

* 코드 * 또는 * 실행 파일 *을 배포 하시겠습니까? – icecrime

+0

@icecrime : g ++ 3/4로 리눅스에서 컴파일 할 때 필요한 모든 파일들로 코드를 배포하고 싶습니다. –

+1

왜 부양 가족으로 부스트를 원하지 않습니까? 대부분의 배포판에는 런타임 라이브러리가 포함되어 있으며 대부분의 패키지 관리자에서 devel 패키지를 사용할 수 있습니다. –

답변

3

Boost.Documentation에는 내가 제공 할 수있는 것보다 더 많은 설명이 있습니다. 가장 두드러진 :

는 는 실제로 BCP는 종속성 오히려 "지방"목록을 생성 할 수 있음을 주목해야한다

이 에 대한 이유는 다음과 같습니다

[...]

  • 헤더를 포함하면 bcp은 어떤 컴파일러를 사용하는지 알 수 없으므로 가능한 모든 사전 처리기 경로를 따릅니다. 만약 당신이 이라면 부스트의 서브셋을 으로 배포하는 것입니다. 그렇다면 응용 프로그램은 일 것입니다.

위의 마지막 요점은 대부분의 사람들의 예상에 비해 발견 된 헤더의 수가 크게 증가 할 수 있습니다. 모든 헤더가 발견 된 이유

종속성으로 우리는 당신이 bcp --report을 시도하고 이유를 확인하시기 볼 수있는 보고서 모드에서 BCP를 실행하여 : 예를 들어, BCP를 들어 부스트/shared_ptr.hpp 274 헤더 종속성을 찾습니다 각 파일을 포함시켜 실제로 필요한지 확인하십시오.

+0

OK, 이것은 HTML을 생성하고 결국에는 의존성 목록이 있습니다. 그러나 그것은 나를 너무 많이 도와주지 않습니다. 'boost/config/compiler/borland.hpp'와 같은 파일을 삭제할 수 있습니다. 필요한 것만 자동으로 보관할 수 있습니까? 그런데 요점은 더 일반적입니다 : 왜'any.hpp','lexical_cast','mpl' 등이 필요하며, 명령 행에서 옵션을 파싱하는 것일 뿐이죠? 나는 이해하지 못한다.나는 단지 ''과'' –

+0

@wiso 만 사용하여 아주 기본 옵션 파서를 쓸 수 있다고 생각한다. 불행히도, 나는이 '청소'가 수동이어야 할 것이라고 생각한다. 의존성에 관해서는, 나는 충분히 부스트를 모른다. .program_options 구현을 통해 설명 할 수는 있지만,'bcp'가 shared_ptr.hpp에 대해서만 274 헤더를 생성한다면, 무엇이든 가능하다고 가정합니다. – icecrime

+1

@Wiso, 만약 * all * 명령 행에서 옵션을 분석하고 싶다면'argv'와'argc'를 읽으십시오. Boost가 할 수있는 모든 깔끔한 것들을 원한다면 (예 : * 프로그램 옵션 지정을위한 간결한 구문을 가지고 있고 자동으로 도움말 메시지를 생성하고 옵션 값을 타입 안전 방식으로 저장하는 등) 'any','lexical_cast','mpl'과 그 모든 의존성을 포함하고 있습니다. –