कुछ दिन पहले मैंने पदानुक्रमित बनाने (http://stackoverflow.com/questions/1498213/make-hierarchical-make-file) लिखने के बारे में स्टैक ओवरफ़्लो में एक उत्तर पोस्ट किया था। जवाब हटा दिया गया था, इसलिए मुझे लगता है कि यह पूरी तरह से गलत था या विषय (या दोनों) बंद था।एक सरल पदानुक्रमित मेकफ़ाइल कैसे लिखें?
मैं जानना चाहता हूं कि पदानुक्रमित मेकफ़ाइल कैसे लिखना है। यह एक मेकफ़ाइल है जो उप-निर्देशिकाओं में कई मेकफ़ाइल कॉल करता है। मैं की तरह एक निर्देशिका संरचना मान:
- project
|--module1
|--Makefile
|--...
|--module2
|--Makefile
|--module2.1
|--module2.2
|--...
|--module3
|--Makefile
|--...
|--etc
मैं भी मान लेते हैं कि परियोजना के सदस्यों केवल केवल तरह makefile लक्ष्यों की एक न्यूनतम सेट पर सहमत हो गए हैं: सभी (डिफ़ॉल्ट), स्वच्छ स्थापित है, और इसलिए। तो, निम्न कमांड सहित बनाने के झंडे मॉड्यूल के लिए प्रचार किया जाएगा:
cd project
make clean
make -k
make install
#etc
क्या निम्नलिखित परियोजना Makefile साथ कुछ गड़बड़ है:
PACKAGES = \
module1 \
module2 \
emodule3
VIRTUAL_PACKAGES = $(addsuffix /.virtual.Makefile,${PACKAGES})
TARGETS=clean install all
.PHONY: $(TARGETS)
default: all
FLAGS = $(ifeq $(MAKEFLAGS) "","",-$(MAKEFLAGS))
$(TARGETS): $(VIRTUAL_PACKAGES)
$(VIRTUAL_PACKAGES):
$(MAKE) $(FLAGS) -C $(@D) $(MAKECMDGOALS)
हाँ, Makefile में $ VIRTUAL_PACKAGES अजीब लग रहा है। पाश के लिए एक मिश्रण के वैकल्पिक थोड़ा कम है लेकिन मुझे यकीन है कि अगर यह बेहतर है नहीं कर रहा हूँ (जैसा कि मैंने पार्टी पर भरोसा करने की जरूरत): = \ module1 \ module2 \ emodule3
TARGETS=clean install all
.PHONY: $(TARGETS)
default: all
FLAGS = $(ifeq $(MAKEFLAGS) "","",-$(MAKEFLAGS))
$(TARGETS):
for p in $(PACKAGES) ; do $(MAKE) $(FLAGS) -C $$p [email protected] || break; done
धन्यवाद संकुल !
'FLAGS' काम करने के लिए है कि काम करता है? मेक का कौन सा संस्करण आप उपयोग कर रहे हैं? – Beta
एक गैर-पुनरावर्ती समाधान: http://stackoverflow.com/a/7321954/412080 –
मई या आपके लिए उपयोगी नहीं हो सकता है, लेकिन जटिल परियोजनाओं के प्रबंधन के लिए मुझे सेमेक रास्ता आसान लगता है। CMakeLists.txt का पदानुक्रम होना वास्तव में आसान है। मेकफ़ाइल स्वचालित रूप से जेनरेट हो जाएंगे। – Hindol