हालांकि यह एक पुराना सवाल है, पूछे जाने वाले तरीके की एक विधि है; बैच फाइलों में सबकुछ की तरह, यह सिर्फ गड़बड़ है!
एक तथ्य के संयुक्त तंत्र है कि आयात पर्यावरण चर बनाने के लिए और है कि पूर्वप्रक्रमक आदेशों आह्वान कर सकते हैं, और फिर Makefile रिकर्सिवली फोन का उपयोग करना पड़ता है। यह मान लें कि मेकफ़ाइल को मेकफ़ाइल कहा जाता है (बिना विस्तार के, जो डिफ़ॉल्ट है)।
!IFNDEF MAKE
MAKE=NMAKE
!ENDIF
!IFNDEF SHELLVALUE
! IF [echo off && FOR /F "usebackq" %i IN (`hostname`) DO SET SHELLVALUE=%i && $(MAKE) /$(MAKEFLAGS) /nologo /f $(MAKEDIR)\Makefile && exit /b ] == 0
! MESSAGE Make completed
! ELSE
! ERROR Error in nmake
! ENDIF
!ELSE
# $(SHELLVALUE) now contains the string returned from the command USERNAME
!MESSAGE Shellvalue is $(SHELLVALUE)
# Put the parts of the makefile that depend on SHELLVALUE here
!ENDIF
#
# To be a valid makefile it must have some rules to perform
all:
@echo;$(SHELLVALUE)
हाँ, मैं अपने भयानक है, लेकिन यह कैसे तकनीक है, जो किसी भी शेल कमांड के साथ किया जा सकता है और न सिर्फ hostname
करने के लिए प्रदर्शित करता है।
स्रोत
2014-12-24 18:51:53
मैं इसे कभी नहीं करने के लिए एक रास्ता खोजने किया था। निष्पक्ष होने के लिए, एमएसबिल्ड ने समस्या को हल नहीं किया, हालांकि मैंने अंततः अन्य कारणों से इसे परिवर्तित कर दिया। अंत में, इस समस्या को हल करने के लिए मैंने परियोजना के निर्माण से पहले जरूरी जरूरी कॉल करने के लिए एमएस पावरशेल को थोड़ा सा स्क्रिप्ट करना समाप्त कर दिया। –