Tôi đang xây dựng dự án C++ dựa trên CMake của bên thứ ba.Thời gian liên kết rất dài với -g và không có tùy chọn -DNDEBUG
Xây dựng dự án ở chế độ phát hành chỉ mất một vài giây. Giai đoạn liên kết mất ít hơn một giây (khi make
in Linking CXX executable myproject.exe
).
Việc xây dựng trong chế độ gỡ lỗi mất hơn một phút. Hầu hết thời gian này là dành liên kết thực thi. Điều này xảy ra ngay cả trong quá trình xây dựng tiếp theo sau khi thay đổi tối thiểu mã.
Sự khác biệt đối với chế độ phát hành có vẻ là tùy chọn -g
so với tùy chọn -O3 -DNDEBUG
. Hành vi này có được mong đợi không? Tôi đã làm việc trên các dự án có kích thước tương tự trước (~ 18k LOC), nhưng tôi chưa bao giờ trải qua sự khác biệt lớn như vậy trong thời gian biên dịch giữa các chế độ gỡ lỗi và phát hành.
này có 50 giây:
C:\msys64\mingw64\bin\g++.exe -std=c++0x -Wall -Wextra -Wpointer-arith \
-Wcast-align -fstrict-aliasing -Wno-unused-local-typedefs -fvisibility- \
inlines-hidden -march=native -g -Wl,--whole-archive \
CMakeFiles\myproject.dir/objects.a -Wl,--no-whole-archive \
-o myproject.exe -Wl,--major-image-version,0,--minor-image-version,0 \
@CMakeFiles\myproject.dir\linklibs.rsp
Thông tin gỡ lỗi có thể khá lớn. Ngoài ra, tôi nghĩ rằng tùy chọn '-NDEBUG' mà bạn đề cập thực sự là' -DNDEBUG' là tùy chọn tiền xử lý '-D' để xác định macro. –
@Someprogrammerdude Bạn nói đúng, tôi đã cập nhật bài đăng của mình. Tôi vẫn thấy kỳ lạ là dự án mất hơn một phút để biên dịch cho dù đó là một công trình sạch hay xây dựng lại. – Jawap
@Jawap Có thể bỏ qua 'NDEBUG' cho phép _lots của code_ trong một số tiêu đề chung? – yugr