मैं एक तृतीय पक्ष सीएमके आधारित सी ++ प्रोजेक्ट का निर्माण कर रहा हूं।-g और बिना -DNDEBUG विकल्पों के साथ बहुत लंबा लिंकिंग समय
रिलीज मोड में प्रोजेक्ट का निर्माण केवल कुछ सेकंड लेता है। लिंकिंग चरण एक सेकंड से कम लेता है (जब make
प्रिंट Linking CXX executable myproject.exe
)।
डीबग मोड में बिल्डिंग एक मिनट से अधिक समय लेती है। इस समय अधिकांश निष्पादन योग्य को जोड़ने में खर्च किया जाता है। यह कोड में न्यूनतम परिवर्तन के बाद भी बाद के निर्माण के दौरान होता है।
रिलीज मोड में अंतर -g
विकल्प बनाम -O3 -DNDEBUG
विकल्प प्रतीत होता है। क्या यह व्यवहार अपेक्षित है? मैंने पहले (~ 18k एलओसी) के समान आकार की परियोजनाओं पर काम किया है, लेकिन मैंने कभी डीबग और रिलीज मोड के बीच संकलित समय में इतना बड़ा अंतर नहीं अनुभव किया है। विशेष रूप से डिबग मोड में बड़ी परियोजनाओं के लिए
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
डीबग जानकारी काफी बड़ी हो सकती है। साथ ही, मुझे लगता है कि आपके द्वारा उल्लेख किया गया '-NDEBUG' विकल्प वास्तव में' -DNDEBUG' है जो एक मैक्रो को परिभाषित करने के लिए '-D' प्रीप्रोसेसर विकल्प है। –
@ सोप्रप्रोग्रामड्यूड आप सही हैं, मैंने अपनी पोस्ट अपडेट की है। मुझे अभी भी यह अजीब लगता है कि परियोजना को संकलित करने में एक मिनट लगते हैं, भले ही यह एक साफ निर्माण या पुनर्निर्माण हो। – Jawap
@Jawap क्या यह संभव है कि 'एनडीईबीयूजी' को छोड़कर कुछ सामान्य हेडर में code_ के _lots सक्षम हो? – yugr