Tôi có một số tệp cpp mất nhiều thời gian để biên dịch. Chúng chứa một số lớp/mã cơ bản, với một số mẫu, nhưng không có gì để biện minh cho thời gian biên dịch theo thứ tự của hàng chục giây.Xác định chức năng biên dịch chậm
tôi sử dụng một vài libs bên ngoài (tăng/opencv)
Đây là những gì gcc nói về thời gian biên dịch. Làm thế nào tôi có thể tìm thấy thư viện/bao gồm/chức năng gọi đó là để đổ lỗi cho thời gian biên dịch khủng khiếp?
Execution times (seconds)
phase setup : 0.00 (0%) usr 0.00 (0%) sys 0.01 (0%) wall 1445 kB (0%) ggc
phase parsing : 6.69 (46%) usr 1.61 (60%) sys 12.14 (47%) wall 488430 kB (66%) ggc
phase lang. deferred : 1.59 (11%) usr 0.36 (13%) sys 3.83 (15%) wall 92964 kB (13%) ggc
phase opt and generate : 6.25 (43%) usr 0.72 (27%) sys 10.09 (39%) wall 152799 kB (21%) ggc
|name lookup : 1.05 (7%) usr 0.28 (10%) sys 2.01 (8%) wall 52063 kB (7%) ggc
|overload resolution : 0.83 (6%) usr 0.18 (7%) sys 1.48 (6%) wall 42377 kB (6%) ggc
...
Profiling the C++ compilation process giao dịch với việc xác định các tập tin chậm, nhưng tôi cần thông tin nhiều hơn hạt mịn để tìm ra thủ phạm
(file khác/dự án biên dịch trong mili giây/giây, vì vậy nó không phải là một vấn đề Tôi sử dụng gcc 4.9.1)
Tìm kiếm nhị phân tệp bằng cách sử dụng '#if 0'? Tức là, đừng biên dịch nửa sau. Nếu bây giờ nhanh, đừng biên dịch lại quý sau. Nếu thay vào đó vẫn còn chậm, không biên dịch lại 3/4. Nếu mã của bạn có 1024 chức năng (!), Vấn đề được giải quyết trong 10 lần lặp (nếu tệp của bạn có 1024 chức năng, có thể kích thước tệp là sự cố). – Yakk
@Yakk: Có lẽ không dễ dàng như vậy. Nửa sau có thể không biên dịch được nếu không có phông chữ. Hơn nữa, nếu mã sử dụng nhiều mẫu, thời gian dài có thể là do sự tương tác giữa hai nửa. – rodrigo
@rodrigo Có, nó là đơn giản: nó xuất hiện bạn dự một thuật toán khác nhau vào mô tả của tôi. Tôi chỉ đề xuất biên dịch tiền tố của tập tin - bạn có thể nhận được lỗi liên kết, nhưng không phải lỗi trình biên dịch. Và đoạn mã đầu tiên gây ra tương tác làm tăng thời gian biên dịch sẽ là đoạn mã được tìm thấy (đoạn "cạnh" của mã, trong đó bao gồm nó làm cho thời gian nổ tung, và loại bỏ nó giữ một thời gian hợp lý). Tất nhiên, nó không giải quyết được vấn đề mà theo đó vấn đề là từ một khoản tiền lớn nhỏ, hoặc một khoản tiền nhỏ lớn, nhưng điều đó có xu hướng hiếm hơn. – Yakk