2011-11-23 25 views
23

Doxygen mất khoảng 12 giờ để chạy trên cơ sở mã của chúng tôi. Điều này chủ yếu là do có rất nhiều mã để xử lý (~ 1.5M dòng). Tuy nhiên, nó rất nhanh chóng tiếp cận điểm mà tại đó chúng tôi không thể cập nhật tài liệu hàng đêm vì chúng mất quá nhiều thời gian. Chúng tôi đã phải giảm độ sâu đồ thị để giảm xuống 12 giờ.Doxygen là Slow

Tôi đã thử các phương pháp tiếp cận chuẩn, nhưng tôi thực sự cần sản lượng chất lượng cao và điều này bao gồm đồ thị và SEARCH_INCLUDES. Tôi có một máy khá tốt để chạy Doxygen, nhưng Doxygen không tận dụng được nhiều lõi của nó. (Nó gắn một CPU đơn trên máy chủ xây dựng, nhưng chỉ có 4% của hệ thống có sẵn.) Việc xây dựng Dot đa luồng rất tiện lợi, mặc dù đó chỉ là một nửa thời gian xây dựng.

Có bất kỳ kỹ thuật nào tôi có thể sử dụng để chạy doxygen thông qua nhiều quy trình và tự phân đoạn tác vụ không? Tôi đã nhìn thấy một số nói về việc tạo ra các tập tin thẻ, nhưng tôi không hiểu đủ về họ để biết nếu họ muốn làm những gì tôi muốn. Những gì tôi đang tìm kiếm là một cái gì đó như:

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 

Tất nhiên, tôi chỉ đang tạo công cụ, nhưng đó là ý tưởng về những gì tôi đang tìm kiếm. Ngoài ra, tôi sẽ sử dụng nhiều hơn 4 quy trình.

+0

Máy chủ có đủ RAM để giữ toàn bộ bộ đệm ẩn và chạy doxygen mà không hoán đổi không? – mpartel

+2

RAM và/hoặc ổ cứng nhanh hơn. Chọn ổ SSD 80 GB và đặt mã của bạn lên đó. Phần mềm mà IO chuyên sâu sẽ được hưởng lợi rất nhiều từ một ổ đĩa cứng trạng thái rắn hiện đại. –

+1

Vâng, nó hiện đang ngồi trên một mảng 10 đột kích của ổ đĩa 10k, vì vậy nó không phải là chậm ... – alficles

Trả lời

50

file Tag thường con đường để đi nếu

  1. bạn có một số file nguồn logic mạch lạc (hãy gọi họ là thành phần) và
  2. bạn biết sự phụ thuộc giữa các thành phần, ví dụ thành phần A sử dụng thành phần B và C và thành phần B chỉ sử dụng C, và
  3. Nó là ok (hoặc thậm chí được ưu tiên) hơn.
  4. bạn quan tâm đến đầu ra HTML.

Tệp thẻ về cơ bản chỉ là danh sách biểu tượng có cấu trúc có liên kết đến vị trí trong tài liệu. Các tệp thẻ cho phép doxygen tạo liên kết từ tài liệu của một thành phần đến một thành phần khác.

Nó là một quá trình 2 bước:

  1. Trước tiên, bạn chạy doxygen trên mỗi thành phần để tạo ra các tập tin tag cho thành phần đó. Bạn có thể làm điều này bằng cách vô hiệu hóa tất cả đầu ra và sử dụng GENERATE_TAGFILE. Vì vậy, cho thành phần A, một Doxyfile.tagonly sẽ có các cài đặt sau:

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

    Bạn sẽ nhận thấy rằng chạy doxygen cách này là rất nhanh.

  2. Bước thứ hai là tạo tài liệu thực tế. Đối với thành phần A bạn cần một Doxyfile bao gồm các tệp thẻ của các thành phần B và C vì chúng tôi đã xác định A phụ thuộc vào các thành phần này.

    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 
    

Sử dụng phương pháp này, tôi đã có thể tạo tài liệu cho 20M + dòng mã phân phối trên 1500 + các thành phần trong dưới 3 giờ trên một máy tính để bàn tiêu chuẩn (Core i5 với 8Gb RAM và Linux 64bit), bao gồm duyệt web nguồn, biểu đồ cuộc gọi đầy đủ và sơ đồ kiểu UML của tất cả các cấu trúc dữ liệu. Lưu ý rằng bước đầu tiên chỉ mất 10 phút.

Để thực hiện điều này, tôi đã tạo một kịch bản để tạo Doxyfile cho mỗi thành phần dựa trên danh sách các thành phần và phụ thuộc trực tiếp của chúng. Trong bước đầu tiên, tôi chạy 8 trường hợp của doxygen song song (sử dụng http://www.gnu.org/s/parallel/). Trong bước thứ hai, tôi chạy 4 trường hợp của doxygen song song.

Xem http://www.doxygen.org/external.html để biết thêm thông tin về tệp thẻ.

+0

Tôi không chắc chắn những gì nó đã được trước, nhưng với Doxygen 1.8.2 tôi cần phải thiết lập 'GENERATE_HTML = CÓ' khi tạo tệp thẻ (bản dựng "chính" không tạo tài liệu HTML cho các dự án được liên kết). –

+2

@doxygen - Trong tài liệu Doxygen, các tệp thẻ được giới thiệu trong "Liên kết tới tài liệu bên ngoài" (http://www.doxygen.org/external.html). Mặc dù điều đó có vẻ là mục đích ban đầu, nhưng các tệp thẻ cũng có thể được sử dụng, ví dụ: nhiều dự án liên quan (nội bộ), theo câu trả lời ở trên. Nếu vậy, nó sẽ giúp đỡ nếu tài liệu được cập nhật tương ứng, cho những người tìm cách tổ chức tốt hơn và/hoặc tối ưu hóa tài liệu của họ. – amolbk

+0

bạn có thể xây dựng trên "kịch bản để tạo ra Doxyfile cho mỗi thành phần dựa trên danh sách các thành phần và phụ thuộc trực tiếp của chúng" không? – spy