/ / विभिन्न मशीनों पर चलने वाले प्रोग्राम के लिए मेकफाइल - बैश, मेकफाइल, एनएफएस, होस्ट

विभिन्न मशीनों पर चलने वाले प्रोग्राम के लिए मेकफ़ाइल - बैश, मेकफ़ाइल, एनएफएस, होस्ट

मेरे पास C ++ प्रोग्राम है जो कई पर चलेगामशीनें जो एक नेटवर्क फाइल सिस्टम का उपयोग करती हैं। मेरे प्रोग्राम का उपयोग करने वाले प्रत्येक C ++ पुस्तकालयों के लिए, मैंने ~ / program_files / machinename / Libraryname के तहत प्रत्येक मशीन के लिए एक संस्करण स्थापित किया है।

"मशीनिन" को बैश कमांड के माध्यम से प्राप्त किया जाता है"होस्ट नाम"। मैं जिन मशीनों का उपयोग कर रहा हूं, उन पर "hostname" कुछ आउटपुट करता है जैसे "io21.aaa.bbb.edu" और मैं पुस्तकालयों के पथ के लिए केवल "io21" को "machinename" के रूप में लेता हूं। बाश में, मैंने सीखा है कि

$ HOST =hostname # अब HOST का मूल्य "io21.aaa.bbb.edu" है

$ HOST = $ {HOST %%।

$ host = $ {host %%।



Translate Home - Google Home

Send us feedback

View Google in:
MobileClassic

©2017 Google - Privacy & Terms

$ गूंज $ {HOST}

io21

मेरे प्रोग्राम के मेकफाइल में, मैं वर्तमान मशीन के अनुसार लाइब्रेरी तक का रास्ता निर्दिष्ट करने के लिए इन बैश कमांड को कॉल करना चाहता हूं:

HOST: = $ (शेल होस्टनाम)

HOST: = $ (शेल $ {HOST %%। *})

LDFLAGS = एल $ {गृह} / program_files / $ {HOST} / libraryname / lib

CXXFLAGS = -Wall -I $ {HOME} / program_files / $ {HOST} / पुस्तकालय का नाम / सूची

पहली पंक्ति काम कर रही है यानी HOST "io21.aaa.bbb.edu", लेकिन दूसरी पंक्ति जो "io21" tn काम नहीं करती है और HOST अभी भी "io21.aaa.bbb.edu" है।

मैं सोच रहा हूं कि मुझे इस समस्या को कैसे हल करना चाहिए?

धन्यवाद एवं शुभकामनाएँ!

उत्तर:

जवाब के लिए 3 № 1

वैकल्पिक रूप से आप इसका उपयोग कर सकते हैं

HOST := $(shell echo $(HOST) | cut -d . -f 1)

जवाब के लिए 3 № 2

इसे आज़माएं:

SHELL = /bin/bash
HOST := $(shell hostname)
HOST := $(shell host=$(HOST);echo $${host%%.*})

make के लिए डिफ़ॉल्ट /bin/sh जो समर्थन नहीं कर सकता है $(var%%string) आपके पास कौन सा संस्करण है, इसके आधार पर निर्माण। भी, मिश्रण make चर और bash वेरिएबल थोड़ा चुनौतीपूर्ण है।