c++ - -जी और बिना- DNDEBUG विकल्पों के साथ बहुत लंबे समय तक लिंक करना



gcc cmake (1)

मैं एक तीसरे पक्ष के सीएमके आधारित सी ++ परियोजना का निर्माण कर रहा हूं।

रिलीज़ मोड में प्रोजेक्ट का निर्माण केवल कुछ सेकंड लेता है लिंकिंग चरण एक सेकेंड से कम समय लेता है (जब Linking CXX executable myproject.exe प्रिंट करता है)।

डीबग मोड में बिल्डिंग एक मिनट से अधिक समय लेती है। इस समय के अधिकांश निष्पादन योग्य लिंक जोड़ने के लिए खर्च किया जाता है। यह कोड के न्यूनतम परिवर्तन के बाद भी बनता है।

रिहाई मोड में -O3 -DNDEBUG विकल्प- -O3 -DNDEBUG विकल्प बनाम- -g विकल्प लगता है। क्या इस व्यवहार की उम्मीद है? मैंने (~ 18k एलओसी) से पहले समान आकार की परियोजनाओं पर काम किया है, लेकिन मैंने डिबग और रिलीज़ मोड के बीच समय को संकलित करने में इतना बड़ा अंतर नहीं अनुभव किया है।

इसमें 50 सेकंड लगते हैं:

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

दुर्भाग्य से बड़ी परियोजनाओं के लिए लिंक समय काफी धीमा हो सकता है, खासकर डिबग मोड में। आमतौर पर मदद करने वाली चीजें हैं

  • साझा किए गए पुस्तकालयों के लिए बंटवारे परियोजना (जो कि एलएलवीएम डेवलपर्स द्वारा किया गया है)
  • SSD (या tmpfs) पर लिंक करना
  • डिफ़ॉल्ट बीएफडी लिंकर के बजाय गोल्ड लिंकर का उपयोग करना




g++