मैं एक बड़ी परियोजना पर काम कर रहा हूं जो कई पर्यावरण, मुख्य रूप से लिनक्स/जीसीसी और विंडोज़/एमएसवीसी के तहत बनना चाहिए। निर्माण को तेज करने के लिए, हम प्रीकंपील्ड हेडर का उपयोग करते हैं।जीसीसी पर प्रीकंपील्ड हेडर के साथ कोई गति नहीं (लेकिन दृश्य स्टूडियो के साथ बड़ी गति)
विंडोज कार्यान्वयन बहुत ही कुशल है: मेरे क्वाड-कोर हाइपरथ्रेड किए गए i7 बिल्ड समय पर 9 मिनट से 1.5 मिनट तक चला जाता है। हालांकि प्रीकंपील्ड हेडर का उपयोग प्रदर्शन में सुधार नहीं लगता है: दोनों मामलों में यह उसी कंप्यूटर पर वर्चुअल बॉक्स के तहत 22 मिनट या वास्तविक सर्वर पर लगभग 40 मिनट के भीतर बनाता है।
तो मैं स्पष्ट सोच रहा हूं कि मुझे किसी तरह से कुछ गलत मिला है और प्रीकंपील्ड हेडर अंदर लात नहीं कर रहा है। हालांकि मुझे यह नहीं मिल रहा है।
हमारी मेकफ़ाइल सीएमके द्वारा उत्पन्न की जाती है, इसलिए मैं हेडर और ऑब्जेक्ट फ़ाइलों को संकलित करने के लिए उपयोग किए गए कोड को पेस्ट कर सकता हूं।
हेडर बनाना:
/usr/bin/c++ -O3 -DNDEBUG --no-warnings "-I/mnt/code/server a/src/game"
"-I/mnt/code/server a/src/game/vmap" "-I/mnt/code/server a/dep/include/g3dlite"
"-I/mnt/code/server a/dep/include" "-I/mnt/code/server a/src/shared"
"-I/mnt/code/server a/src/framework" "-I/mnt/code/server a/buildlinux"
"-I/mnt/code/server a/buildlinux/src/shared" -I/usr/include/mysql
"-I/mnt/code/server a/dep/acelite" -DDO_MYSQL -DHAVE_CONFIG_H
-DVERSION=\"0.6.1\" -DSYSCONFDIR=\"../etc/\" -D_RELEASE -D_NDEBUG -x c++-header
-o "/mnt/code/server a/buildlinux/src/game/pchdef.h.gch" "/mnt/code/server
a/src/game/pchdef.h"
एक वस्तु फ़ाइल संकलन:
/usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) "-I/mnt/code/server
a/buildlinux/src/game" -include pchdef.h -Winvalid-pch -o
CMakeFiles/game.dir/AccountMgr.cpp.o -c "/mnt/code/server
a/src/game/AccountMgr.cpp"
इनसाइट्स की सराहना कर रहे हैं, भले ही वे सीधे नहीं है इसके बाद के संस्करण के टुकड़े से निकाले जाते हैं।
आप भाग्यशाली हैं, मैंने पाया कि जीसीसी के साथ प्रीकंपील्ड हेडर का उपयोग करना भी निर्माण को धीमा कर देता है। कुछ समय पहले CLANG बेहतर था, लेकिन अब यह प्रीकंपील्ड हेडर का उपयोग करके बेकार लगता है, जिससे एमएसवीसी को एकमात्र कंपाइलर के रूप में छोड़ दिया जाता है जो इससे लाभान्वित होता है। – Lothar