में फ़ाइल नामों में कोलन से बचना क्या जीएनयू को कॉलन वाले फ़ाइल नामों के साथ सही तरीके से काम करने का कोई तरीका है?मेकफ़ाइल
मैं जिस विशिष्ट समस्या में चल रहा हूं वह पैटर्न नियम को शामिल करने के लिए होता है।
% make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-redhat-linux-gnu
% cat Makefile
COLON := \:
all: ; true
%.bar: ; cp $< [email protected]
x.bar: x.foo
%.foo: ; touch [email protected]
a$(COLON)b.bar: a$(COLON)b.foo
all: x.bar a$(COLON)b.bar
clean: ; rm -f *.foo *.bar
% make clean
rm -f *.foo *.bar
% make
touch x.foo
cp x.foo x.bar
cp a\:b.bar
cp: missing destination file operand after `a:b.bar'
Try `cp --help' for more information.
make: *** [a\:b.bar] Error 1
एक शाब्दिक साथ $ (कोलन) की जगह: उत्पादन बिल्कुल वैसा ही परिणाम यहाँ एक सरलीकृत संस्करण है कि काटने और चिपकाने टैब वर्ण पर निर्भर नहीं करता है। बैकस्लैश के बिना, यह इस करता है:
Makefile:6: *** target pattern contains no `%'. Stop.
बहुत अच्छा हैक! मैं $ (खोल) के साथ ठीक हूं, मेरा सवाल जीएनयू को वैसे भी विशिष्ट था। मुझे लगता है कि यह एक "अजीब अस्थायी फ़ाइल व्यवस्था" का एक उदाहरण होगा जिसका दूसरा जवाब बात कर रहा था। मुझे इस मामले में क्या होता है, इस बारे में थोड़ी चिंता कीजिए जहां "एलएस" चीज विफल होने के लिए प्लेसहोल्डर है और $ (POST) इस प्रकार नहीं चलती है। मेरा मतलब है कि मुझे लगता है कि यह शायद अधिकतर ठीक है क्योंकि $ (PRE) बेवकूफ है, है ना? और यदि आपके पास अपने फ़ाइल नामों में वास्तविक @ COLON @ s हो सकता है, तो आप बस एक लंबे और अधिक हास्यास्पद प्लेसहोल्डर का उपयोग कर सकते हैं, शायद इसमें एक लंबे यादृच्छिक स्ट्रिंग के साथ एम्बेडेड .... – zaphod