2011-07-26 5 views
6

부스트에 필요한 헤더 파일의 수를 크게 줄이는 방법이 있습니까? 이상적으로는 Boost 직원에게 제품을 더 작게 만드는 방법을 찾아달라고 요청합니다. 하지만 그 동안 부스트를 포함 할 수있는 방법이 있지만 수천 개의 헤더 파일을 처리 할 수있는 방법이 있습니까?부스트 헤더 파일 다루기

수천 개의 헤더 파일을 단일 "패키지"에 "묶어서"단일 파일을 소스 제어로 확인하는 C++ 메커니즘이 있습니까?

여기 소스 제어 문제가 있다고 생각합니다. diff, svn st 및 체크 아웃 작업은 이러한 모든 파일을 처리하는 데 너무 느립니다.

+3

첫 번째 체크 인/아웃 만 느리지 만 정확합니까? 나는 당신이 부스트 헤더에 중대한 변화를 일으키고 있는지 의심 스럽다. 그래서 첫 번째 체크 아웃에서 다운로드되면, 후속 체크 아웃은 업데이트 된 버전을 얻을 필요가 없다. 이것은 소스 제어 메커니즘이 비교적 정상적인 것으로 가정합니다. – Chad

+2

Chad가 말한 것 외에도 코드를 직접 수정하지 않는 한 제 3 자 라이브러리를 소스 제어로 체크인하지 않는 경향이 있습니다. 대신 라이브러리를 보관하고 프로젝트에 컴파일 지침을 포함시키는 방법을 포함하십시오. – Praetorian

+0

"거래"란 무엇을 의미합니까? 프리 컴파일 된 헤더 파일을 사용하면 Boost.GIL을 사용할 때 10 초 이상의 작은 프로그램 컴파일 시간을 초 단위로 단축 할 수 있다는 사실을 깨달았습니다. –

답변

9

부스트는 BCP이라는 도구를 제공합니다. BCP를 사용하면 부스트의 하위 집합을 추출 할 수 있습니다. 또한 소스 트리를 분석하고 소스 트리가 사용하는 부스트 컴포넌트 만 추출 할 수 있습니다.

2

제 3 자 라이브러리를 별도의 저장소에 두는 것이 좋습니다. Boost는 서식 파일이 무거 우므로 헤더를 묶지 않는 꽤 좋은 이유가 있습니다. 번들 된 부스트 헤더를 포함 시키려고하면 버전 관리에서 빌드 시간으로 "낭비되는"시간이 이동하게됩니다. 그것은 실제로 확장되지 않습니다. 부스트 헤더를 사용하려고하면 부스트를 사용하지 않을 것입니다.

이전에 비슷한 질문을 한 적이 있는데, 기술적 제약 사항에 대해 아직 확신하지 못했습니다.

0

모든 파일을 하나의 파일로 패키지 할 수있는 방법은 없습니다 (보관 파일 버전 관리는 제외). 부수적으로, Subversion은 부스트 ​​헤더와 같은 수천 개의 작은 파일을 체크 아웃 할 때 속도가 느린 것으로 알려져 있으므로 Git과 같은보다 우수한 SCM으로 전환하는 것을 고려할 수 있습니다.

bcp에 관심이 있습니다. bcp은 사용하는 부스트 헤더와 별도의 디렉토리에서 소스와 복사본을 분석하는 부스트 도구입니다. 이것은 제 3 자 파일을 줄이는 데 많은 도움을 주었고, 대부분 내 경우에 맞았습니다 (목록에 몇 가지 파일을 추가해야했습니다).

0

요청한 내용이 아니지만 여기에 문제를 해결할 수있는 방법이 있습니다. Boost 파일을 코드 제어 저장소에 추가합니다. 왜? 그것들은 프로젝트 자체가 아니며, 통제에 속하지 않습니다.

다음은 내가 그런 종류의 문제에 부딪치지 않도록 프로젝트를 구성하는 방법입니다. 아래에 언급 된 것처럼 lib 폴더를 제외한 모든 것은 소스 제어에 추가됩니다. (난 단지 내 디렉토리 트리의 관련 부분을 보여줍니다.)

  • /
    • SRC — 내 자신의 소스 파일과 헤더 (예 : 부스트 등)
    • 내선 — 외부 종속성
      • 향상을 포함 -1-46-1
        • 다운로드.TXT —는 소스 제어
        • LIB —에 추가되지 않습니다
        • 가 —이 포함
        • 에서 올바른 버전을 다운로드 할 수 있습니다 링크가 포함이 둘
+0

"왜? 프로젝트 자체가 아니기 때문에 통제 할 수 없습니다." 그렇게해야하는 몇 가지 이유가 있습니다. 외부 프로젝트를 버전 제어하에 두어 다른 시스템에 쉽게 배포 할 수 있습니다. 또한 실수로 파일을 변경하면 이러한 변경 사항을 취소 할 수 있습니다. 물론 버그를 수정해야하는 경우 이미 버전 관리가 진행 중입니다. –

+3

리비전 컨트롤에 물건을 넣지 않으면 모든 개발자가 제 3 자 라이브러리와 동일한 버전으로되어 있는지 확인해야합니다. –

+0

@Tom & Nicol : 나는 팀과 함께 일한 적이 없다는 것을 인정합니다. 그 대답은 그 관점에서 쓰여졌습니다. 그럼에도 불구하고 두 개의 저장소를 갖는 것이 더 낫지 않을 것입니다 : 하나는 코드 용이고 다른 하나는 제 3 자 라이브러리 용입니다. –

1

ccache는 될 수 없다 전처리 무거운 컴파일 속도를 높이는 생명의 은인.