2016-10-08 2 views
10

मैं एक पुस्तकालय का उपयोग कर रहा हूं जिसमें नमूना आवेदन है। नमूना makefile बहस में $< शामिल हैं:

all:test.cpp 
    g++ -Wl,--no-as-needed -o Example $< 
clean: 
    rm -f SampleApp11 

मैं इस ऊपर देखा है और tutorialspoint का कहना है कि

$ < संबंधित फ़ाइल है कि कार्रवाई के कारण होता है का नाम है।

एक और website कहा गया है कि:

इस ग के से ओ के निर्माण के लिए एक प्रत्यय प्रतिस्थापन नियम है यह स्वत: चर $ < उपयोग करता है: शासन की शर्त के नाम (एक। सी फ़ाइल) और $ @: नियम के लक्ष्य का नाम (एओ फ़ाइल) (स्वचालित चर के बारे में gnu मैन्युअल अनुभाग देखें) .co: $ (सीसी) $ (CFLAGS) $ (शामिल) -सी $ < -o $ @

मैं अभी भी उलझन में हूं, इसका क्या अर्थ है?

+0

आपके उदाहरण में यह 'सभी:' लक्ष्य - 'test.cpp' के बाद ** पहली ** निर्भरता (फ़ाइल) है। – Galik

+0

आह, तो '<$ 'g ++ बताता है जो संकलन करने के लिए फ़ाइल है, क्या यह सही है? –

+12

ध्यान दें कि इसका g ++ से कोई लेना देना नहीं है। यह बना है जो g ++ को कॉल करने से पहले इसे बदल देता है। g ++ कभी भी '$ <' नहीं देखता है। यदि ऐसा होता है, तो यह इसे फ़ाइल नाम के रूप में मानता है, और शायद उस नाम से कोई फ़ाइल नहीं होने पर त्रुटि संदेश जारी हो सकता है। – hvd

उत्तर

16

यह वास्तव में संकलक के साथ कुछ भी नहीं है, Makefile वाक्यविन्यास का हिस्सा है और यह संकलक चलाने से पहले प्रतिस्थापित किया जाता है।

अपने उदाहरण में यह पहले निर्भरता (फाइल) all: लक्ष्य के बाद है - test.cpp

Makefile का मूलभूत कार्य करता है, तो एक निर्भरता परिवर्तन एक लक्ष्य बनाने के लिए है:

target: dependency.cpp 
    rule to create target (using dependency.cpp) 

आमतौर $<इनपुट संकलक करने के लिए है और [email protected]उत्पादन है।

यह एक तरह से जैसे कि वह यह था (एक मान्य Makefile) है:

[email protected]: $< 
    g++ -o [email protected] $< 

मैं उन्हें याद रास्ता @ है लक्ष्य जैसा दिखता है (लक्ष्य अभ्यास के रूप में) और < एक तीर जैसा दिखता है। तो मैं एक तीर एक लक्ष्य करने के लिए इशारा कल्पना:

@ <-------- (think "Robin Hood") 

YMMV

9

यह GNU make's automatic variables से एक है।

पहली शर्त का नाम। यदि लक्ष्य को से एक नुस्खा नियम प्राप्त किया गया है, तो यह अंतर्निहित नियम (Implicit Rules देखें) द्वारा जोड़ा गया पहला शर्त होगा।

targets : prerequisites 
     recipe 

उदाहरण के लिए, निम्नलिखित नियम में पहली शर्त test.c फ़ाइल है::

my_executable: test.c precompiled.o 
    g++ -o my_executable $< 

यह निम्न के बराबर है

एक शर्त rule में सूचीबद्ध एक फाइल है :

my_executable: test.c precompiled.o 
    g++ -o my_executable test.c 

और precompiled.o दूसरी शर्त है (एक precompiled ऑब्जेक्ट फ़ाइल निहित)।

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