Makefile में उर्फ ​​लक्ष्य नाम




alias target (2)

मुझे नहीं लगता कि ऐसा करने का कोई तरीका है ताकि आप अपने मेसेफाइल के साथ-साथ कमांड लाइन के अलावा उन अस्थायी फ़ाइलों को बनाकर उपनाम का उपयोग कर सकें।

आप makefile में क्यों नहीं केवल एक चर सेट कर सकते हैं, जैसे:

my_binary = /very/long/path/my_binary

तो $(my_binary) हर जगह $(my_binary) उपयोग करें? मेकफाइल के अंदर उपयोग के लिए एक असली उपनाम लक्ष्य बनाने में मुझे कोई बात नहीं दिखाई देती

समस्या:

क्या लक्ष्य को एक अलग नाम या उपनाम देना संभव है, जैसे कि यह मूल लक्ष्य नाम या उपनाम का उपयोग कर लाया जा सकता है

जैसे कुछ के लिए उदाहरण

/very/long/path/my_binary: dep_a dep_b dep_c
    # Compile

# Desired command
ALIAS my_binary = /very/long/path/my_binary

# NOTE: Notice the use of 'my_binary' in the dependencies
data1: my_binary datafile
    # Build data file using compiled my_binary

प्रयास 1: .PHONY

मैंने एक .PHONY लक्ष्य का उपयोग करने की कोशिश की है:

.PHONY: my_binary
my_binary: /very/long/path/my_binary

कमांड लाइन से लागू होने पर यह बहुत अच्छा काम करता है:

# Runs rule 'my_binary' and then *only* runs rule '/very/long/path/my_binary'
# if the rule '/very/long/path/my_binary' needs updating.
make my_binary

हालांकि, यह ठीक से काम नहीं करता है जब उपनाम my_binary एक निर्भरता के रूप में सूचीबद्ध है:

# *Always* thinks that rule 'data1' needs updating, because it always thinks that
# the .PHONY target 'my_binary' "needs updating". As a result, 'data1' is
# rebuilt every time.
make /very/long/path/my_binary

संभावित हैक?

संभव हैक एक खाली लक्ष्य का उपयोग करने के लिए इस प्रश्न के उत्तर में सुझाव दिया गया है, लेकिन इसके लिए उपनाम से संबंधित नामों के साथ नकली फाइलों को शुरू करने की आवश्यकता होगी:

my_binary: /very/long/path/my_binary
    touch my_binary

यह फाइल के साथ मुख्य निर्देशिका को अव्यवस्थित करेगा! उप-निर्देशिका में नकली फाइलों को रखने से इस उद्देश्य को नुकसान होगा, क्योंकि उपनाम को 'निर्देशिका / my_binary' के रूप में संदर्भित करना होगा


ठीक है, मुझे कुछ इसी तरह की आवश्यकता थी। मेरे आउटपुट कलाकृतियों का पथ काफी लंबा था, लेकिन मैं कम लक्ष्य के नाम चाहता था और यहां तक ​​कि बैश-पूर्ण होने से आसानी से फायदा होता है।

मैं यहाँ किस प्रकार आया हूं:

os := [arbitrary long path to an artifact]
platform := [arbitrary long path to a differ artifact]
packer := [common parts of my packer build command]

.PHONY: all
all: $(platform)

.PHONY: platform
platform: $(platform)

$(platform): platform.json  $(os)
    @$(packer) $<

.PHONY: os
os: $(os)

$(os): os.json
    @$(packer) $<

.PHONY: clean
clean:
    rm -fr build/

ऊपर Makefile के साथ आप कह सकते हैं:

$ make os
$ make platform

कौन सा लंबा विरूपण नाम के लिए उपनाम होगा। मैंने बहुत लंबे समय से ऊपर स्निपेट बनाया है, क्योंकि इसके लिए पीओएनआई एलआईएस और वास्तविक लक्ष्य के बीच के रिश्तों को देखना महत्वपूर्ण है। मुझे आशा है कि आपके लिए काम करता है

नोट: मैंने ऊपर दिए गए उदाहरण से साफ लक्ष्य को नहीं हटाया है, क्योंकि बहुत से लोग ऐसा नहीं करते हैं। PHONY लक्ष्य हालांकि, अर्थात् यह होना चाहिए।







synonym