صنع Gnu وz/OS USS
سؤال
1) نحن بحاجة إلى Makefiles لبناء C++ على كل من z/OS USS ومنصة Linux.هل يُنصح باستخدام gnu make على z/OS USS للحفاظ على ملفات makefiles الخاصة بنا مشتركة؟
2) إذا كانت ملفات Makefiles شائعة، فستظل بعض الخطوات في Makefiles مشروطة بالمنصة.هل يمكننا فعل ذلك بخطوات مشابهة للتجميع الشرطي؟إذا كانت الإجابة بنعم، هل يمكننا الحصول على مساعدة في بناء الجملة؟
3) تحتوي ملفات z/OS USS Makefiles الخاصة بنا على نصوص برمجية أو مجموعات من الأوامر، كما هو موضح في المثال أدناه، مع الأقواس المربعة [] التي تقدم الأوامر إلى الصدفة كمجموعة، بدلاً من سطر واحد في كل مرة.يبدو أنه باستخدام GNU make، كان علينا تعديل هذه الأوامر لتصبح سطرًا واحدًا، وهو أمر فوضوي، وكانت الحلقة المتداخلة مشكلة.هل هناك طريقة أسهل لتجميع الأوامر باستخدام gmake؟
[
dirs=$(targets)
rc=0
for dir in $$dirs
do
cd $$dir/src
make -r
rc=$$?
if [ $$rc != 0 ]; then
echo "build failed for directory:" $$dir:
break;
fi
cd ../..
done
echo "return code from make = " $$rc
]
المحلول
إخلاء المسؤولية:
- لا أعرف شيئًا عن z/OS USS،
- أعرف الكثير عن الصنع (وعندما تحمل مطرقة،...).
نصيحة:
# Usually one defines a variable first. SYSTEM = $(shell uname) # Then one can define other variables conditionally SOMEFILE = $(SYSTEM)_file ifeq ($(SYSTEM), Linux) # Do some Linux things, define variables, whatever. else # Do some z/OS USS things. endif # In a block of commands, if the conditional DOESN'T start with a tab, # it's a Make statement and follows Make syntax. thing: ifeq($(SYSTEM), Linux) shell-command-do-something endif # If the conditional DOES follow a tab, Make expands the variables and passes # the whole thing to the shell, so the syntax is whatever the shell requires. otherthing: if($(SYSTEM)==ZOS) do_x ; otherwise do_y ; finish
وهناك حيل أخرى أكثر تقدمًا يمكنك تجربتها عندما تشعر بالملل منها.
نصائح أخرى
إذا كان لديك حاجة للمحمول Makefiles، وبكل الوسائل استخدام GNU جعل. لقد تم تشغيله تحت USS لسنوات حتى الآن دون أي مشاكل. إذا كنت لا تشعر بالراحة بناء ذلك بنفسك، يمكنك الحصول على نسخة أأ <لأ href = "http://www-03.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty1.html#gmake" يختلط = "noreferrer نوفولو"> من هنا
ولقد بنيت العديد من التطبيقات على ض / OS باستخدام يونكس خدمات النظام (USS) وC / C ++ / HLASM. لقد وجدت أنه على جيدا يستحق كل هذا العناء لاستخدام gmake بدلا من جعل. نعم، لديك لتحميل gmake وإعداده، ولكن انها وسيلة أسهل في الاستخدام، وأسهل طريقة لجعل المحمولة. بالإضافة إلى gmake، قد ترغب في الحصول على باش م> كذلك. فإنه سيكون من الأسهل أن يكون مخطوطات قذيفة المحمولة بين USS ومنصات أخرى باستخدام باش بدلا من إجبار نفسك على استخدام <م> ش م>. ربما يكون هناك عدد قليل من الأماكن التي يمكنك الحصول عليها gmake وباش من، ولكن لقد استعملت الموقع الصواريخ: <لأ href = "http://www.rocketsoftware.com/product-categories/mainframe/bash-zos" يختلط = "noreferrer نوفولو"> http://www.rocketsoftware.com/product-categories/mainframe/bash-zos (وأنه مجاني إذا كنت لا تريد الدعم).