2012-05-12 8 views
29

मैं -j तर्क का उपयोग कर निर्माण प्रक्रिया के लिए धागे की संख्या सेट कर सकता हूं। उदाहरण के लिए, मेरे पास 4 कोर +4 आभासी है। जब मैं लिखता हूं: make -j8 गति 4 गुना बढ़ जाती है।समांतर बनाने: set -j8 डिफ़ॉल्ट विकल्प के रूप में

क्या यह मान डिफ़ॉल्ट रूप से सेट करना संभव है? (उदाहरण के लिए, लिनक्स जेनेटू में, कॉन्फ़िगरेशन फ़ाइल में, यह डिफ़ॉल्ट मान सेट करना संभव है)।

पेज। मैं आर्क लिनक्स

+1

यह एक जीसीसी की तुलना में एक मेकअप सवाल का अधिक है। – Pubby

+0

तो .. डिफ़ॉल्ट सी ++ बनाने का विकल्प 'संभव से 4 गुना धीमा है'? क्या एक अजीब निर्णय! –

+1

@ मार्टिनजेम्स समांतर बनाने में कई त्रुटियां हैं और इसलिए यह एक खराब डिफ़ॉल्ट बनाता है। – Pubby

उत्तर

30

आपका प्रश्न धागे के बारे में नहीं है, लेकिन प्रक्रियाओं (नौकरियों) द्वारा निष्पादित किया गया है।

सरल, इस सेट करने के लिए इस तरह, जब मेकअप कंसोल से प्रयोग किया जाता है जोड़ रहा है:

alias make="/usr/bin/make -j 8" 

अपने .profile फाइल करने के लिए।

तुम भी setenv MAKEFLAGS '-j 8' उपयोग कर सकते हैं, लेकिन MAKEFLAGS कुछ परिस्थितियों में इस पैरामीटर अनदेखा कर सकते हैं, क्योंकि प्रक्रियाओं की वांछित संख्या रखने पुनरावर्ती make कॉल के साथ संवाद स्थापित करने की आवश्यकता है। खुशी से यह विधि works with current versions of GNU Make

+6

इस के बाद से "रिकर्सिव मेक" का उल्लेख करना बंद नहीं होता है, मैं एक बार फिर से http://aegis.sourceforge.net/auug97.pdf पर इंगित करना चाहता हूं ... इसके अलावा, मेक फ़ाइल को भी अनुमति देने के लिए अच्छी तरह लिखा जाना चाहिए समानांतर बनाने के लिए। अक्सर, विशेष रूप से स्वचालित तरीके, वास्तविक निर्भरताओं को नजरअंदाज करते हैं और लक्ष्य को कई बार बनाया जा सकता है और पसंद ... – 0xC0000022L

+0

यदि लिंक भविष्य में काम नहीं कर रहा है, तो पेपर का शीर्षक "रिकर्सिव वर्किंग हार्मफुल" है और इसे काफी आसान होना चाहिए ढूँढ़ने के लिए। यह पढ़ने के लायक है। – SystemParadox

+0

यहां 'setenv' क्या है? सीएसएच निर्मित? – alecov

25

setenv MAKEFLAGS '-j8'

आशा इस मदद करता है!

5

यहाँ कैसे मैं यह किया है या नहीं:

CORES ?= $(shell sysctl -n hw.ncpu || echo 1) 

all:; @$(MAKE) _all -j$(CORES) 
_all: install lint test 
.PHONY: all _all 
… 

मैं मूल रूप से एक "निजी" _all करने के लिए "एलियास" किया है मेरा डिफ़ॉल्ट लक्ष्य all। कोर की संख्या को समझने का आदेश ओएसएक्स विशिष्ट है, AFAIK, ताकि आप इसे और अधिक क्रॉस प्लेटफ़ॉर्म के रूप में बेहतर बना सकें। और ?= असाइनमेंट की वजह से, यदि आवश्यक हो तो हम इसे ओवरराइड कर सकते हैं और एनवी परिवर्तनीय कर सकते हैं।

संपादित करें:

आप भी अपनी MAKEFLAGS को makefile के भीतर ही से है, इसलिए की तरह जोड़ सकते हैं:

CPUS ?= $(shell sysctl -n hw.ncpu || echo 1) 
MAKEFLAGS += --jobs=$(CPUS) 
… 
+1

यह अन्य समाधानों से बेहतर IMHO है, क्योंकि आप इसे मेकफ़ाइल प्रति बना सकते हैं। –

+0

आप इस तरह से MAKEFLAGS को बदल नहीं सकते हैं। इसे आज़माएं: https://gist.github.com/sanmai/dcc31ae20afa6e8ba4721f174fe05fd9 – sanmai

संबंधित मुद्दे