2011-11-23 2 views
23

Doxygen이 코드 기반을 실행하는 데 약 12 ​​시간이 걸립니다. 이것은 주로 처리 할 코드가 많기 때문에 (~ 1.5M 라인). 그러나 너무 오랜 시간이 걸리기 때문에 야간 문서 업데이트를 할 수없는 시점에 매우 빠르게 접근하고 있습니다. 우리는 이미 12 시간까지 그래프 깊이를 줄여야했습니다.Doxygen이 느림

나는 표준 접근법을 시도했지만 실제로는 고품질 출력이 필요하며 그래프 및 SEARCH_INCLUDES가 포함됩니다. Doxygen을 실행하는 데 꽤 좋은 기계가 있지만 Doxygen은 많은 코어를 사용하지 않습니다. (빌드 서버에 단일 CPU를 고정 시키지만 사용 가능한 시스템의 4 % 만 사용합니다.) 다중 스레드 된 Dot 빌드는 빌드 시간의 절반 정도이지만 유용합니다.

여러 프로세스를 통해 doxygen을 실행하고 수동으로 작업을 분류하는 데 사용할 수있는 기술이 있습니까? 태그 파일을 만드는 방법에 대해 이야기 한 적이 있지만 필자는 그들이 원하는대로 할 수 있는지 충분히 알지 못합니다. 내가 찾고 같은 것입니다 : 물론

doxygen Doxyfile-folder1 
doxygen Doxyfile-folder2 
doxygen Doxyfile-folder3 
doxygen Doxyfile-folder4 
doxygen-join output/folder1/html output/folder2/html output/folder3/html output/folder4/html 

, 난 그냥 만들고있어 물건까지,하지만 그건 내가 무엇을 찾고의 생각이다. 또한 4 개 이상의 프로세스를 사용합니다.

+0

서버에 캐시 된 전체 코드베이스를 유지하고 스왑없이 doxygen을 실행하기에 충분한 RAM이 있습니까? – mpartel

+2

RAM 및/또는 더 빠른 하드 드라이브. 80 기가 바이트 SSD를 들고 코드를 작성하십시오. IO 집약적 인 소프트웨어는 현대의 솔리드 스테이트 하드 드라이브에서 엄청난 이익을 얻을 것입니다. –

+1

글쎄, 현재 10k 드라이브의 RAID 10 배열에 앉아 있으므로 느려서는 안됩니다 ... – alficles

답변

50

태그 파일이 논리적으로 일관성있는 소스 파일의 번호를 가지고

  1. 경우 이동 일반적으로 방법은 예를 들어, 구성 요소 간의 종속성을 알고
  2. (의 그들 구성 요소를 호출하자) 구성 요소 A는 구성 요소 B 및 C를 사용하고 구성 요소 B는 C만을 사용하고
  3. 색인 파일 (예 : 파일/클래스/기능 목록)은 단일 구성 요소로 제한됩니다.
  4. HTML 출력에 관심이 있습니다.

태그 파일은 기본적으로 문서의 위치에 대한 링크가있는 기호의 구조화 된 목록입니다. 태그 파일을 통해 doxygen은 한 구성 요소의 문서에서 다른 구성 요소의 문서로의 링크를 만들 수 있습니다.

은 2 단계로 이루어집니다 :

  1. 먼저 해당 구성 요소의 태그 파일을 생성하기 위해 각 구성 요소에 doxygen이를 실행합니다. 모든 출력을 비활성화하고 GENERATE_TAGFILE을 사용하여이 작업을 수행 할 수 있습니다. 구성 요소 A에 대한하며,이 Doxyfile.tagonly는 다음과 같은 설정을 할 것이다 : 당신은이 방법 Doxygen을 실행하는 매우 빠른 것을 알 수 있습니다

    GENERATE_HTML   = NO 
    GENERATE_LATEX  = NO 
    GENERATE_RTF   = NO 
    GENERATE_MAN   = NO 
    GENERATE_TAGFILE  = compA.tag 
    

    .

  2. 두 번째 단계는 실제 문서를 생성하는 것입니다. 구성 요소 A의 경우 A와 B의 태그 파일을 포함하는 Doxyfile이 필요합니다. A가 이러한 구성 요소에 의존한다고 판단했기 때문입니다. 나는 표준 데스크톱 PC에 3시간 아래에 1500 개 + 구성 요소에 분산 코드 20M + 라인에 대한 문서를 (8GB의 RAM 및 Linux 64 비트와 코어 I5)를 생성 할 수있게되었습니다이 방법을 사용

    GENERATE_HTML   = YES 
    GENERATE_LATEX  = NO 
    GENERATE_RTF   = NO 
    GENERATE_MAN   = NO 
    TAGFILES    = path/to/compB/compB.tag=path/to/compB/htmldocs \ 
             path/to/compC/compC.tag=path/to/compC/htmldocs 
    

, 소스 브라우징, 전체 콜 그래프 및 모든 데이터 구조에 대한 UML 스타일의 다이어그램을 포함합니다. 첫 번째 단계는 10 분 밖에 걸리지 않았습니다.

이 작업을 수행하기 위해 구성 요소 목록과 직접적인 종속성을 기반으로 각 구성 요소에 대한 Doxyfile을 생성하는 스크립트를 만들었습니다. 첫 번째 단계에서는 doxygen의 인스턴스 8 개를 병렬로 실행합니다 (http://www.gnu.org/s/parallel/ 사용). 두 번째 단계에서는 doxygen 인스턴스를 4 개 병렬로 실행합니다.

태그 파일에 대한 자세한 내용은 http://www.doxygen.org/external.html을 참조하십시오.

+0

이전에는 무엇인지 모르겠지만 Doxygen 1.8.2로 설정해야합니다. GENERATE_HTML = YES "태그 파일을 생성 할 때 ("마스터 "빌드는 링크 된 프로젝트에 대한 HTML 문서를 생성하지 않습니다). –

+2

@doxygen - Doxygen 문서에서 태그 파일은 "외부 문서에 링크"(http://www.doxygen.org/external.html)에 소개되어 있습니다. 그것이 초기 목적 인 것처럼 보이지만, 태그 파일은 다른 방법으로도 사용될 수 있습니다. 위의 답변에 따라 여러 관련 (내부) 프로젝트 그렇다면 문서를보다 잘 정리하고 최적화하려는 사람들을 위해 문서가 적절히 업데이트되면 도움이 될 것입니다. – amolbk

+0

"구성 요소 목록과 그 직접 종속성에 따라 각 구성 요소에 대한 Doxyfile을 생성하는 스크립트"에 대해 자세히 설명 할 수 있습니까? – spy