सारांश:
मैं जीएनयू एक यूनिक्स की तरह सिस्टम पर (3.81) बनाने का उपयोग कर रहा है और मैं एक मुद्दा जहां $(wildcard, pattern)
समारोह करने में असमर्थ है आई है पहले निष्पादित नुस्खा (संभवतः/स्पष्ट रूप से?) द्वारा उत्पन्न फ़ाइल ढूंढें, जबकि अन्य प्रोग्राम (जैसे एलएस) इसके अस्तित्व को सत्यापित करने में सक्षम हैं। मैं जानना चाहता हूं कि क्यों वाइल्डकार्ड फ़ंक्शन कुछ भी वापस नहीं कर रहा है, जब इसे विस्तारित किया गया है (खाली स्ट्रिंग पर), और जेनरेट की गई फ़ाइल को ढूंढने के लिए मैं इसे कैसे प्राप्त कर सकता हूं।जीएनयू वाइल्डकार्ड समारोह क्रम उत्पन्न फ़ाइलों नहीं मिल रहा है बनाने के
टेस्ट मामला:
निम्नलिखित परीक्षण का मामला समस्या को दिखाता है।
Makefile सामग्री:
.PHONY: build clean
test:
@echo "Creating test file 'test'."
@echo "this is a test file" > test
build: test
@echo "Directory contents:"
@ls
@echo "Test file contents:"
@cat test
@echo "Wildcard output:"
@echo $(wildcard test)
clean:
@rm -f test
makefile चल रहा है दो बार (तब की सफाई) से पता चलता है कि केवल पर इसके दूसरे भाग करता है यह बनाई गई फ़ाइल का पता लगाने।
आउटपुट:
Creating test file 'test'.
Directory contents:
makefile test
Test file contents:
this is a test file
Wildcard output:
Directory contents:
makefile test
Test file contents:
this is a test file
Wildcard output:
test
पुन: पेश करने के लिए:
सहेजें एक खाली निर्देशिका में makefile, फिर "का निर्माण करते हैं; निर्माण करते हैं; स्वच्छ बनाने के" चलाते हैं।
अनुसंधान:
जिस क्रम में एक लक्ष्य की आवश्यक शर्तें independent of the order in which they appear in the list after the colon है कार्रवाई की जाती है, इसलिए स्पष्ट अंतर-शर्त निर्भरता यदि आप वे किस क्रम में संसाधित कर रहे हैं परिभाषित करना चाहते हैं शुरू की जानी चाहिए।
हालांकि, मुझे नहीं लगता कि मैं नीचे निर्भरता किसी भी अधिक पट्टी कर सकते हैं; build
test
पर निर्भर करता है, और test
एक फ़ाइल जो मौजूद नहीं है और उसके नुस्खा द्वारा उत्पन्न होता है से मेल खाती है। मैंने माना कि यह तब तक उपस्थित होगा जब build
के लिए नुस्खा संसाधित किया जाना था।
कैसे कर सकता हूँ makefile पार्स करता है की मेरी जानकारी से, नुस्खा अंदर वाइल्डकार्ड समारोह तक संसाधित होने के विस्तार नहीं किया जाना चाहिए। हालांकि, मैं स्पष्ट रूप से अंतर्निर्मित बनाने की कार्यक्षमता के आउटपुट के बीच एक अंतर देखता हूं, और खोल के माध्यम से उपयोग की जाने वाली सामान्य उपयोगिताओं का उत्पादन, इसलिए यह अनुमान शायद गलत है, लेकिन मुझे लगता है कि किसी भी अच्छे स्पष्टीकरण में नहीं आया है यहां होने के लिए, जीएनयू में भी मैन्युअल नहीं बनाते हैं।
N.B. इस सवाल का उद्देश्य बस इस समस्या से संबंधित वाइल्डकार्ड फ़ंक्शन के कार्यकलापों की समझ प्राप्त करना है; एक व्यावहारिक उपयोग केस है जिसमें से मैंने इस पानी के नीचे संस्करण को आसवित किया है, लेकिन मुझे इस मामले में अधिक दिलचस्पी है।