2009-10-09 14 views
17

मेरी makefile में मैं इस तरह, निर्देशिका की सूची के साथ एक चर राशि:में शामिल होने से तत्वों बनाने

DIRS = /usr /usr/share/ /lib 

अब, मैं इसे से पथ चर बनाने के लिए है, जो मूल रूप से एक ही है की जरूरत है , लेकिन विभाजक के रूप में अर्धविराम का उपयोग करता है:

PATH = /usr:/usr/share/:/lib 

मैं यह कैसे कर सकता हूं? मेरा मतलब है, मैं रिक्त स्थान की बजाय सेमीकॉलन के साथ डीआईआरएस सूची के तत्वों में कैसे शामिल हो सकता हूं?

p = /usr /usr/share /lib 
noop= 
space = $(noop) $(noop) 

all: 
     @echo $(subst $(space),:,$(p)) 

आशा है कि मदद करता है,

एरिक Melski

+0

+1 मेरे पास एक ही प्रश्न है ... आपको लगता है कि यह आसान होगा। –

उत्तर

30

आप $(subst) आदेश, एक छोटे से चाल के साथ संयुक्त एक चर एक भी अंतरिक्ष के एक मूल्य है कि प्राप्त करने के लिए उपयोग कर सकते हैं सबसे साफ फॉर्म (जो मुझे मिल सकता है):

classpathify = $(subst $(eval) ,:,$(wildcard $1)) 
cp = a b c d/*.jar 

target: 
    echo $(call classpathify,$(cp)) 
# prints a:b:c:d/1.jar:d/2.jar 

नोट्स:

  • इसे छद्म-फ़ंक्शन में बदलना इराक स्ट्रिंग मैनिपुलेशन इनलाइन का एक गुच्छा करने से इरादा स्पष्ट करता है।
  • मैंने $ (वाइल्डकार्ड) फ़ंक्शन शामिल किया क्योंकि क्लासपाथ
  • निर्दिष्ट करते समय आप लगभग हमेशा इन दोनों का उपयोग करते हैं, सुनिश्चित करें कि अल्पविराम के बाद कोई अतिरिक्त रिक्त स्थान न डालें या आपको ":: a: b : सी: d: ई "।
+0

वाह, एक आकर्षण की तरह काम करता है, बहुत धन्यवाद! घंटों के लिए इसके साथ संघर्ष कर रहे थे! –

+1

आप '$ (noop) 'के बजाय' $ (eval) 'का उपयोग भी कर सकते हैं, इस प्रकार नोप को परिभाषित करने की आवश्यकता को समाप्त कर सकते हैं। ऐसे काले जादू खोजने के लिए –

+2

+1। –

8

:

+0

एक चीज जो मैं जोड़ूंगा: अब जब जावा "-सीपी lib/*" वाक्यविन्यास का समर्थन करता है, तो आप $ (वाइल्डकार्ड $ 1) करने से बच सकते हैं, जो शायद जावा प्रोजेक्ट्स के उपयोग की प्रवृत्ति के रूप में करने के लिए एक अच्छी बात है जार के टन से ऐसे मामलों का कारण बन सकता है जहां आप कुछ प्लेटफार्मों पर लंबी सीमाएं पार करते हैं। –

+1

एक और सामान्य रूप: joinwith = $ (subst $ (eval), $ 1, $ 2) $ (joinwithwith, -o, $ (list_of_files_separated_by_spaces) पर कॉल करें) –

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