2011-03-13 9 views
6

के एकाधिक हिस्सों में एक उपसर्ग के रूप में एक चर लागू करना मेरे पास एक छोटा जावा प्रोजेक्ट है जिसे मैं मेकफ़ाइल का उपयोग करके बनाना चाहता हूं, कोड src/package... /*.java में है, बाइटकोड bin/package.../*.class पर जाना चाहिए।
मेरे वर्तमान फ़ाइल की तरह इस (सरलीकृत) दिखता है:मेकफ़ाइल - किसी अन्य चर के

JC = javac 
SRCDIR = src 
BINDIR = bin 
JCFLAGS = -d $(BINDIR)/ 

CLASSES = $(SRCDIR)/package/class1.java $(SRCDIR)/package/class2.java $(SRCDIR)/package/class3.java 

default: 
    $(JC) $(JCFLAGS) $(CLASSES) 

यह काम करता है और क्या यह होना चाहिए है, लेकिन वहाँ यह करने के लिए एक और अधिक सुरुचिपूर्ण तरीका हो गया है।
उदाहरण के लिए, क्या सभी वर्ग फ़ाइल नामों के उपसर्ग के रूप में पथ ($(SRCDIR) और पैकेज का नाम) लागू करने का कोई तरीका है, इसलिए मुझे हर वर्ग के सामने पथ को अलग-अलग नहीं रखना है?

सभी वर्गों, एक javac-कॉल में संकलित की के रूप में वहाँ उन में परिपत्र निर्भरता हैं, इसलिए प्रत्येक वर्ग के लिए एक स्वयं के लक्ष्य का उपयोग काम नहीं करता है:

default: $(CLASSES) 
%.java: 
    $(JC) $(JCFLAGS) $(SRCDIR)/[email protected] 

आपकी मदद के लिए धन्यवाद।

उत्तर

9
GNU make manual से

:

$(addprefix prefix,names...) 

तर्क नामों की एक श्रृंखला, खाली स्थान के द्वारा अलग माने जाते हैं; उपसर्ग एक इकाई के रूप में प्रयोग किया जाता है। उपसर्ग का मूल्य प्रत्येक व्यक्तिगत नाम के सामने प्रस्तुत किया जाता है और परिणामी बड़े नाम उनके बीच एकल रिक्त स्थान के साथ संयोजित होते हैं। उदाहरण के लिए,

$(addprefix src/,foo bar) 

परिणाम 'src/foo src/बार' पैदा करता है।

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