سؤال

هل من الممكن لتحديث البيئة من MAKEFILE؟ أريد أن أكون قادرة على خلق هدفا لضبط متغيرات البيئة العميل بالنسبة لهم. شيء من هذا القبيل:

AXIS2_HOME ?= /usr/local/axis2-1.4.1
JAVA_HOME  ?= /usr/java/latest
CLASSPATH  := foo foo

setenv:
    export AXIS2_HOME
    export JAVA_HOME
    export CLASSPATH

وحتى أن العميل يمكن ببساطة القيام به:

make setenv all
java MainClass

و، وأنها تعمل بدونها الحاجة إلى تعيين CLASSPATH لتنفيذ جافا أنفسهم.

وأو أنا أبحث للقيام بذلك بطريقة خاطئة، وهناك طريقة أفضل؟

هل كانت مفيدة؟

المحلول

لا، لا يمكنك تحديث بيئة في عملية الاستدعاء بهذه الطريقة. بصفة عامة، فرعي أو جانبي لا يمكن تعديل البيئة من عملية الأصل. واحد الاستثناء الملحوظ هو الملفات الدفعية على ويندوز، عند تشغيله من قذيفة كمد. وبناء على سبيل المثال تظهر، اعتقد انك لا تعمل على ويندوز بالرغم من ذلك.

وعادة، ما كنت تحاول إنجاز يتم مع شيل أن يضع البيئة ومن ثم استدعاء العملية المقصودة الخاصة بك. على سبيل المثال، قد كتابة السيناريو go.sh مثل هذا:

!#/bin/sh
AXIS2_HOME=/usr/local/axix2-1.4.1
JAVA_HOME=/usr/java/latest
CLASSPATH=foo foo
export AXIS2_HOME
export JAVA_HOME
export CLASSPATH
java MainClass

تأكد go.sh للتنفيذ، والآن يمكنك تشغيل التطبيق الخاص بك كما ./go.sh. يمكنك ان تجعل السيناريو الخاص بك أكثر تفصيلا أيضا، إذا كنت ترغب - على سبيل المثال، قد كنت تريد أن تجعل "MainClass" معلمة إلى النصي بدلا من الصعب الترميز أنه

نصائح أخرى

ومن سؤالك وأنا على افتراض أنك تستخدم قذيفة باش.

ويمكنك وضع تعريفات متغير في شيل، كما يلي:

AXIS2_HOME=/usr/local/axis2-1.4.1
export AXIS2_HOME
#etc

وبعد ذلك source البرنامج النصي في البيئة الحالية، مع

source <filename>

وأو مجرد

. <filename>

وهذا ينفذ النصي في قذيفة الحالية (أي أي عملية طفل)، حتى يتغير أي بيئة السيناريو يجعل ستستمر.

والجواب السريع هو نعم، ولكن في التعليمات البرمجية الخاصة بك، سوف تحتاج إلى تعريف المتغيرات في ابق ضاغطا: التوجيه. فعل ذلك في بداية ماكيفيلي يجعل من متغير محلي إلى ماكيفيلي. وأود أن استخدام _... LOCAL في الجزء العلوي من الملف ثم ضعه في ابق ضاغطا: التوجيه مع VAR = LOCAL_VAR الخ ... تذكر أيضا أنك سوف تحتاج إلى استدعاء في makefile مع make ابق ضاغطا فقط. وأود أن ننظر حقا في القيام بذلك في السيناريو باش كما يحتاج المتغير المراد إنشاؤها خارج ماكيفيلي. مرة واحدة وقد تم إنشاء المتغير في البيئة، يجب أن تكون قادرا على تعيين والتصدير من ماكيفيلي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top