एक टिप मदद कर सकता है कि CMake उपयोगकर्ताओं
-jN विकल्प काम नहीं करता एक makefile कॉल रिकर्सिवली जब के रूप में cmake-makefiles आम तौर पर करते हैं। लेकिन एक ऐसा उपाय है जो फिर से काम करता है क्योंकि जेनरेट किए गए मेकफ़ाइल में सीएमके इस तरह के सिंटैक्स के माध्यम से कॉल करता है।
$(MAKE) -f CMakeFiles\Makefile2 <subproject>
इसका मतलब है आप चर कर संशोधित कर सकते हैं:
mingw32-make "MAKE=mingw32-make -j3"
अब हर बार एक subproject-मेकअप शुरू कर दिया है, यह फिर से "-j3" विकल्प हो जाता है। लेकिन ध्यान दें कि यह प्रभावी रूप से समांतर संकलनों की संख्या को 3 तक सीमित नहीं करता है जैसा कि आप उम्मीद कर सकते हैं। यदि आपके पास 3 से अधिक परियोजनाएं हैं जो एक ही पदानुक्रम पर एक दूसरे पर निर्भर नहीं हैं तो सभी 3 परियोजनाएं समानांतर निर्माण करेंगी और उनमें से प्रत्येक ने 3 संकलन चरणों को लॉन्च किया है। 9 समांतर संकलन चरणों में परिणाम।
जब हम सेमीकेक द्वारा उत्पन्न मेकफ़ाइल शीर्ष पर एक और नज़दीकी नज़र डालते हैं तो हम देखते हैं कि लक्ष्य "सभी" अनिवार्य रूप से केवल उप-निर्माण शुरू करता है।
$(MAKE) -f CMakeFiles\Makefile2 all
तो हम
mingw32-make "MAKE=mingw32-make -j3" -f CMakeFiles\Makefile2 all
फोन करके subproject समानांतरवाद में से एक परत को हटा सकते हैं लेकिन इस प्रगति रिपोर्टिंग बलिदान।
मुझे उम्मीद है कि यह फिर भी मदद करता है।
आपका अधिकार। जैसा कि आप वर्णन करते हैं, मैंने इसे काम करने के लिए प्राप्त किया - मुझे बस एक उचित बिंदु खोजने के लिए एक भयानक मेकफ़ाइल को उलझाना पड़ा - कॉल करना (कॉल करना कॉल करना ...)। – Oliver
यदि आप एक साइगविन/मिनजीडब्लू खोल का उपयोग कर रहे हैं: 'shell' system variable को 'cmd'' पर सेट करना न भूलें (अन्यथा sh या sh.exe डिफ़ॉल्ट रूप से उपयोग किया जाएगा (उदाहरण के लिए साइगविन पर ...) और आपने जीता बहु-प्रक्रिया निष्पादन का समर्थन करने में सक्षम नहीं होगा)। बस 'SHELL = सीएमडी' निर्यात करें। आसान। –
@ कराको नोयू, कृपया _don't_ ऐसा करें। 'sh' बस काम करता है। यह क्रॉस-प्लेटफार्म है। इसमें कोई समांतरता समस्या नहीं है। (_cygwin_ पर भी- _mingw_ के लिए vouch नहीं कर सकते हैं।) 'cmd' बस भयानक है। – bobbogo