عربيالفرنسيةالإسبانية

Ad


OnWorks فافيكون

makepp_variables - عبر الإنترنت في السحابة

قم بتشغيل makepp_variables في مزود الاستضافة المجاني OnWorks عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذا هو الأمر makepp_variables الذي يمكن تشغيله في مزود الاستضافة المجانية OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


makepp_variables - كيفية استخدام المتغيرات في makepp

الوصف


?: $ * ،
$ + ،
$ / ،
$ <،
$ ؟،
@ $ ،
$ ^ ،
=,
! =،
& = ،
+ = ،
: = ،
؛ = ،
؟ =، A: AR ،
ARFLAGS ،
مثل، C: نسخة،
CFLAGS ،
"التبعيات_ المتغيرة" ،
المدخلات المتغيرة ،
كوردير ،
CXX ،
CXXFLAGS ، D: "التبعيات"،
"الاعتماد"، F: F77،
FC ،
"foreach"، I: إدخال،
المدخلات، L: LD ،
ليكس ،
ليبتول ، M: يصنع،
MAKECMDGOALS ،
MAKEFLAGS ،
MAKEINFO ،
MAKEPP_DEBUG ،
MAKEPPFLAGS ،
_MAKEPPFLAGS ،
MAKEPP_LN_CP ،
"makepp_percent_subdirs" ،
"makepp_require_phony"،
makepp_signature_C_flat ،
"makepp_simple_concatenation" ،
MAKEPP_VERSION ، O: "انتاج"،
"النواتج"، P: بيرل ،
الأشخاص ذوي الإعاقة ، R: RM ،
جذر، S: صدَفَة،
"اعتمادات_فرز" ،
تم الفرز_المدخلات ،
"ينبع"، T: استهداف،
الأهداف ، V: VPATH ، Y: YACC

عادةً ما تستخدم ملفات Makefiles المتغيرات في العديد من الأماكن. سبب مهم لاستخدام
المتغيرات هي ضمان احتواء المعلومات في مكان واحد فقط في makefile ، لذلك
أنه إذا تغير ، فلا يوجد خطر من خروج نسختين من المعلومات
المزامنة.

أسماء المتغيرات حساسة لحالة الأحرف. من الناحية النظرية ، يمكن تكوين أسماء المتغيرات من العديد
الشخصيات ، ولكن من المحتمل ألا يكون makepp قادرًا على التملص منه إذا فعلت أي شيء آخر غير
الأحرف الأبجدية الرقمية ، "_" ، و "-".

كل makefile له مجموعته الخاصة من المتغيرات ، وإرادة تعيين متغير في makefile واحد
ليس لها تأثير على قيمتها في أي makefile آخر. إذا كنت ترغب في تعيين المتغيرات
العديد من ملفات makefiles ، فإن أفضل طريقة للقيام بذلك هي تضمين كل منها تعريفات مشتركة
ملف (انظر بيان التضمين) أو استخدم المتغيرات "العالمية".

متغير مهمة
يمكن للمتغير أن يفترض قيمة بعدة طرق مختلفة:

· يمكن تعيين متغير داخل ملف makefile. هناك عدد من الطرق المختلفة للقيام بذلك
هذا؛ انظر أدناه.

· يمكن تحديد قيمة المتغير في سطر الأوامر ، مثل هذا:

makepp CFLAGS = -O2 my_program

إذا تم تحميل أكثر من ملف makefile واحد ، فسيتم نشر متغير CFLAGS لجميع ملفات
makefiles. تتجاوز المتغيرات المعينة في سطر الأوامر أي إعداد لـ
المتغير في أي من ملفات makefiles.

إذا لزم الأمر ، يجب أن يتجاوز ملف makefile بدوره إعدادات سطر الأوامر بشكل صريح.
ليس القصد تجاهل ما يطلبه المستخدم ، بل طريقة لتعديله.
قد يسبق المعدل "override" أي بيان تخصيص. لكن في حالة
عبارات الكلمات الرئيسية ، الترتيب مهم ، وهذا هو سبب متغير التجاوز
دائما معروض أدناه. ينطبق معدِّل "التجاوز" فقط على أي تخصيصات حيث يكون
موجود ولا يؤثر على التخصيصات اللاحقة للمتغير.

· إذا تم تعيين متغير في البيئة ، فيمكن الرجوع إليه كمتغير makepp.
عادةً ما تكون التخصيصات للمتغيرات داخل إعدادات تجاوز makefile من
البيئة ، ولكن يمكنك تغيير ذلك باستخدام "-e" أو "- تجاوزات البيئة"
خيار سطر الاوامر.

يتم تعيين المتغيرات بواحد من عدة تعبيرات مهمة ، مثل هذا

X = 1
الوحدات: = abcd
CC؟ = دول مجلس التعاون الخليجي
CFLAGS + = -الجدار
تعريف VAR
خط فار 1
خط فار 2
com.enddef
مسار التصدير: = $ (PWD): $ (PATH)
MYPROJECT.INFO العالمي = معلومات يمكن رؤيتها في جميع ملفات makefiles

دائمًا ما يتم تجريد المسافات البيضاء البادئة والزائدة حول القيم.

عوامل التخصيص المختلفة لها معاني مختلفة إلى حد ما.

الاشارات مهمة مشغلي

=
VARIABLE = سلسلة نصية
تجاوز VARIABLE = سلسلة نصية

هذا هو بيان التخصيص المعتاد الذي تقدمه جميع تطبيقات الدعم. ال
التعبير على الجانب الأيمن لا يتم تقييمه حتى قيمة "$ (VARIABLE)"
في الواقع تستخدم في مكان ما. وبالتالي ، إذا قمت بما يلي:

X = 1
ص = دولار (X)
X = 2

ثم "$ (Y)" لاحقًا في makefile سيتم تقييمه إلى "2".

بشكل عام ، تريد عادةً استخدام ": =" (انظر أدناه) بدلاً من "=" لأنها
يوفر تقييم متغير أكثر قابلية للتنبؤ. ومع ذلك ، هناك أوقات تحتاج فيها
لتأجيل تقييم المتغير. أيضا ، إذا كنت تكتب makefile يجب أن يكون
متوافق مع الإصدارات السابقة مع بعض إصدارات make غير GNU ، إذن ليس لديك
الاختيار: يمكنك فقط استخدام "=".

:=
متغير: = expr
تجاوز متغير: = expr

هذا هو نفسه "VARIABLE = expr" فيما عدا أنه تم تقييم الجانب الأيمن
مرة واحدة وإلى الأبد في وقت المهمة. وهكذا إذا

X: = 1
ص: = دولار (X)
X: = 2

ثم "$ (Y)" لاحقًا في makefile سيتم تقييمه إلى "1" نظرًا لأن هذا ما كان "$ (X)"
عندما تم تعريف "$ (Y)".

;=
متغير ؛ = expr
تجاوز متغير ؛ = expr

هذا هو نفسه "VARIABLE: = expr" فيما عدا أنه تم تقييم الجانب الأيمن
فقط في وقت الاستخدام الأول ثم تذكرها. هذا مفيد للباهظة الثمن
الأوامر ، التي تُرجع دائمًا نفس القيمة ، ولكن لا تريد تنفيذها عندما
بناء أهداف غير ذات صلة:

VAR1 ؛ = $ (حسابات باهظة الثمن لكل بيرل)
VAR2 ؛ = $ (أمر خارجي للقذيفة)

لاحظ أن ملفات makefiles القديمة ستستخدم عادةً ": =" هنا ، للقيام بذلك مرة واحدة على الأقل.
ولكن مع هذا المشغل ، يمكنك أيضًا عدم القيام بذلك ، إذا لم تقم بذلك حاليًا
بحاجة إلى القيمة. بالنسبة للقيم المتطابقة في عدة أدلة ، يمكنك ذلك
قم بتحسين هذا بشكل أكبر باستخدام "العالمية" ، الموضحة أدناه.

ومع ذلك ، لا يُقصد بهذه الطريقة أن تكون طريقة ذكية لفرض أمر التقييم. اذا كان
المتغير المعرف بهذا الشكل يتضمن قيمة متغير آخر ، ومتغير آخر
له قيمة محددة مستهدفة ، والتوسيع الأول لهذا الهدف ، ثم
القيمة المحددة المستهدفة ستظل ثابتة في جميع السياقات الأخرى أيضًا. هذا هو الخطأ و
نأمل أن يتم إصلاحه في المستقبل.

+=
VARIABLE + = expr
تجاوز VARIABLE + = expr

تلحق السلسلة بالمحتويات السابقة للمتغير ، مفصولة بمسافة. لو
تم تخصيص المتغير مسبقًا بـ ": =" ، ثم يتم تقييم الجانب الأيمن
قبل الحاق.

&=
متغير & = expr
تجاوز VARIABLE & = expr

يسبق السلسلة إلى المحتويات السابقة للمتغير ، مفصولة بمسافة.
إذا تم تعيين المتغير مسبقًا بـ ": =" ، فسيكون الجانب الأيمن
تم تقييمها قبل الإلحاق.

على سبيل المثال ، إحدى طرق ضمان أن "CFLAGS" ، أي شيء آخر قد يضعه المستخدم ،
دائمًا ما يبدأ بـ "-Wall" هما السطرين:

CFLAGS = -O2 # ربما تم تجاوزها في سطر الأوامر
تجاوز CFLAGS & = -Wall # مُسبَق بشكل غير مشروط

في ملفات makefiles القديمة ، كان عليك عادةً القيام بشيء مثل هذا ، والذي كان له جانب
تأثير إجبار النوع على ": =" لمنع التكرار اللانهائي:

متغير: = expr $ (متغير)

?=
VARIABLE؟ = expr
override VARIABLE؟ = expr # عديم الفائدة ، لكن قانوني

يضبط قيمة المتغير ، ولكن فقط إذا لم يتم تحديد المتغير مسبقًا في
makefile في سطر الأوامر أو في البيئة. التعيين أعلاه هو
بالضبط يعادل

ifndef متغير
المتغير = expr
ENDIF

!=
VARIABLE! = أمر شل
override VARIABLE! = أمر shell

يقوم بتشغيل الأمر shell وتعيين المتغير لاحتواء الإخراج القياسي للأمر.
هذا يعادل بالضبط

متغير: = $ (أمر shell)

متعدد الأسطر المتغيرات

بيان "تحديد" هو المكافئ متعدد الأسطر للعبارات البسيطة أعلاه. ال
العامل بعد المتغير اختياري. إذا كان مفقودًا ، فهو يعادل "تحديد VARIABLE
= ". العاملان" & = "و" + = "مختلفان قليلاً هنا ، من حيث أنهما يتم لصقهما بهما
القيمة القديمة بسطر جديد ، بدلاً من مسافة. يجب ألا يكون هناك أي شيء باستثناء ملف
التعليق بعد العبارة ، أي أن القيمة تبدأ في السطر التالي.

تعريف المتغير: =
السطر الأول من قيمة المتغير
السطر الثاني من قيمة المتغير
السطر الثالث من قيمة المتغير
com.endef

تجاوز تعريف متغير

com.enddef

الكلمات الرئيسية قبل "تحديد" يمكن أن تكون مجموعات من "تصدير" أو "عالمية" و
"تجاوز".

إذا كنت بحاجة إلى قيمة متغير لاحتواء أسطر جديدة ، فيجب عليك استخدام عبارة "تحديد" كـ
معروض (أو يمكنك تعيين القيمة مباشرة في Perl). (تم اختيار "endef" ل
التوافق مع GNU. يمكنك أيضًا استخدام "enddef".) هذا مفيد بشكل أساسي لـ
"تسلسلات الأوامر المعلبة" ، على سبيل المثال ، شيء من هذا القبيل:

حدد COMPILE_C_PROGRAM
& صدى "تجميع $ (input)"
@ $ (CC) $ (CFLAGS) $ (CPPFLAGS) $ (يشمل) -c $ (المدخلات) -o $ (المخرجات)
com.endef

ثم يمكنك استخدام هذا المتغير متعدد الأسطر في عدة قواعد ، مثل هذا:

٪ .o:٪ .c
$ (COMPILE_C_PROGRAM)

$ (قوس) /٪. o: $ (قوس) /٪. ج
$ (COMPILE_C_PROGRAM)

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

COMPILE_C_PROGRAM =echo "ترجمة $ (إدخال)" ؛ \
$ (CC) $ (CFLAGS) $ (CPPFLAGS) $ (يشمل) -c $ (المدخلات) -o $ (المخرجات)

سيكون لها نفس التأثير ، باستثناء أن الفاصلة المنقوطة تجبر Perl على تمريرها إلى الغلاف ،
بدلاً من تنفيذ الأمر بشكل مباشر وأكثر كفاءة. عليك أيضا أن تضع كل منها
مبني على خط خاص به ، مما يعني أنه يتعين عليك التبديل إلى الصدى الخارجي في ملف
حالة الفاصلة المنقوطة.

هناك تخصص واحد عند التوسيع داخل "تحديد" ، أي "تعريف X: =" أو في أ
المتغير الذي كان بالفعل ": =" ، "تحديد X & =" و "تحديد X + =". في هذه الحالة
"$ (أمر shell ...)" أو "$ (& command ...) المدمج" لا يتم تحويل الأسطر الجديدة إلى
المسافات.

ألاستراد والتصدير المتغيرات إلى العمليات الفرعية

تصدير VAR ...
تصدير VAR = القيمة
تجاوز تصدير VAR + = القيمة

يشير النموذج الأول إلى المتغيرات المحددة للتصدير إلى العمليات الفرعية ، بأي قيمة
ثم المتغير. النموذج الثاني ، الذي ينطبق فقط على متغير واحد ، بالإضافة إلى ذلك
يعين قيمة على الفور. مسموح بجميع متغيرات التخصيص.

المشاركة المتغيرات في com.makefiles

VAR العالمية ...
العالمية VAR = القيمة
تجاوز القيمة العالمية VAR & = القيمة

يشير النموذج الأول إلى المتغيرات المحددة على أنها متغيرات عامة لجميع ملفات makefiles. إذا كان أي منهم
لها قيمة بالفعل ، يتم نقل هذه القيمة من المتغير المحلي makefile إلى المتغير العام
واحد. ومع ذلك ، في وقت مشاهدة هذا البيان ، فإن أي ملفات makefiles أخرى لديها بالفعل ملف
قيمة لأي منهم ، فلن يرى هؤلاء makefiles واحدًا عالميًا.

النموذج الثاني ، الذي ينطبق فقط على متغير واحد ، بالإضافة إلى ذلك يعين حق القيمة
بعيد. مسموح بجميع متغيرات التخصيص. لاحظ أن ": =" ستتوسع على الفور
للقيم في makefile المحلي. على العكس من ذلك ، فإن المتغيرات "=" ستتوسع إلى
القيم عند نقطة الاستخدام.

يمكن أن يكون التعامل مع المتغيرات العامة خادعًا ، لأن makepp قد يقوم بتحميل ملفات makefiles في أي منها
النظام ، حيث تبرز الحاجة إلى بناء بعض الأهداف التي لا يتم تحميل أي قاعدة أو ملفات makefiles من أجلها.
لهذا السبب فمن المستحسن أن يكون لديك ملف ملف RootMakepp وتحميل كل صراحة
الآخرين الذين يقومون بتعديل أو استخدام المتغير مع "load-makefile".

GLIBLIBS العالمية ؛ = $ (shell pkg-config --libs glib-2.0)

لاحظ أيضًا أن مشروعك قد يتم إنشاؤه يومًا ما مع مشاريع أخرى. لهذا
السبب في أنه يوصى دائمًا بجعل اسم المشروع جزءًا من أي اسم متغير عالمي.

الهدف المحدد تعيينات

الهدف: VARIABLE = سلسلة
الهدف: متغير: = سلسلة
الهدف: تجاوز VARIABLE + = سلسلة

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

CFLAGS: = -O2

my_prog: file1.o file2.o Special_file.o

special_file.o: CFLAGS: = -g

٪ .o:٪ .c
$ (CC) $ (CFLAGS) -c $ (إدخال) -o $ (إخراج)

ما يحدث هنا هو أنه سيتم تجميع جميع ملفات ".c" باستخدام التحسين ("-O2") إلا
"special_file.c" ، والذي يتم تجميعه في وضع التصحيح ("-g"). هذه طريقة ملائمة ل
تحديد خيارات تجميع مختلفة لملفات قليلة فقط.

تخصيصات المتغيرات الخاصة بالهدف مثل هذه تنطبق فقط على إجراءات القاعدة ؛ هم
ليست سارية المفعول عند تقييم الأهداف أو تبعيات القاعدة. إذا كانت هناك قاعدة
لديها أكثر من هدف واحد ، والتخصيصات المتغيرة الخاصة بالهدف مأخوذة فقط من
أول هدف. لاحظ أيضًا أن متغيرات makepp الخاصة بالهدف مختلفة قليلاً
من جعل GNU في أنها تنطبق فقط على قاعدة الملف الواحد المذكور ، وليس على
أي من سابقاتها.

يتم تنفيذ توسيع أحرف البدل على الهدف ، لذا يمكنك القيام بشيء مثل هذا:

اختبار _ *. o: CFLAGS + = -DTEST

للتوافق مع جعل GNU ، يمكن استخدام "٪" بدلاً من "*".

متغير الاستبدال
قواعد الاستبدال المتغيرة لـ Makepp مشابهة لتلك الخاصة بالماركات الأخرى ، لكن إلى حد ما
اقوى. كما هو الحال في جميع الماركات ، يمثل كل من "$ (CC)" أو "$ {CC}" قيمة
متغير CC. إذا كنت بحاجة إلى علامة دولار حرفية ، فضع علامة دولار مزدوجة ($$) ، مثل
هذه:

الهدف: dep1 dep2 dep3 dep4
& rm -f $ (الإخراج)
للملف بالدولار (المدخلات) ؛ قم بعمل ملف cat $$ >> $ (إخراج) ؛ منتهي

بالإضافة إلى ذلك ، يحتوي makepp على بناء جملة "$ [VARIABLE]" ، والذي يقوم بنفس الشيء مثل الآخر
اثنين ، ولكن قبل makepp groks أي شيء آخر. هذا يسمح باستخدامه لقواعد كاملة
و / أو الشروط:

تعريف bracket_rule =
ifdef SOME_VAR
قوس:
& صدى هذه قاعدة -o $ (إخراج)
ENDIF
com.enddef

$ [bracket_rule]

RC- على غرار الاستبدال

بشكل افتراضي ، يستخدم makepp أسلوب الاستبدال RC (يسمى ذلك لأنه كان رائدًا بواسطة
قذيفة RC). يتضح هذا بشكل أفضل من خلال مثال:

الوحدات = abcd

mylib.a: module_dir / $ (وحدات) .o $ (OTHER_OBJECTS)
$ (CXX) $ (التبعيات) -o $ (الهدف)

يتم إضافة البادئة "module_dir /" إلى كل كلمة في الوحدات النمطية ، واللاحقة ".o" هي
ملحق بكل كلمة.

يمكنك أيضًا استخدام أسلوب الاستبدال RC بدون وضع قائمة الكلمات في ملف
عامل؛ بناء الجملة هو "$ (word1 word2)". لاحظ المسافة بين القوسين و
أول كلمة. لذلك يمكن كتابة المثال أعلاه على النحو التالي:

mylib.a: module_dir / $ (abcd) .o $ (OTHER_OBJECTS)
$ (CXX) $ (التبعيات) -o $ (الهدف)

سيعطي المتغير استبدالًا بنمط RC فقط عند وجود أكثر من كلمة فيه.
بكلمة واحدة إنه يشبه الصنع التقليدي. للأسف ، عندما يكون المتغير فارغًا ، يوجد ملف
صراع. التقليدية تجعل ببساطة توسيعها إلى السلسلة الفارغة. ولكن عندما تفكر في
كقائمة ، فأنت تريد اختفاء "-I $ (DIRLIST)" ، وليس إعطاء "-I" وحيدًا. ال
الحل هو لفها في قائمة تبدأ بمسافة: "-I $ ($ (DIRLIST))" يمنحك
بالضبط العديد من الخيارات ، حيث توجد كلمات في القائمة.

إذا قمت بوضع العديد من المتغيرات في نفس الكلمة والتي تتسع إلى مصفوفات من الكلمات ، فإن RC-style
يأخذ الاستبدال في الواقع المنتج الديكارتي ، لذا يمكنك فعل شيء كهذا إذا
انت تريد:

ديرس = s1 s2
الوحدات = abc
اللواحق = .o .c
الملفات: = $ (DIRS) / $ (MODULES) $ (SUFFIXES)

وستحتوي FILES على السلسلة

s1 / ao s1 / ac s1 / bo s1 / bc s1 / co s1 / cc s2 / ao s2 / ac s2 / bo s2 / bc s2 / co s2 / cc

إلى جانب المساحة البيضاء ، يتوقف الاستبدال بأسلوب RC عند أي اقتباس أو أي دائري أو مجعد أو مربع
الأقواس وأي من "،: ؛ = # @". لاحظ أن هذا قد يكون مفاجئًا ، ومرة ​​أخرى بحاجة
قائمة صريحة. لنفترض أنك تريد البحث عن الرؤوس بواسطة حرف البدل في جميع الدلائل
تبدأ بحرف كبير:

BAD: = [AZ] * / ** / *. $ (hpp h) # [AZ] * / ** / *. hpp * / ** / *. h
جيد: = $ ([AZ] * / ** / *.) $ (hpp h) # [AZ] * / ** / *. hpp [AZ] * / ** / *. h

إذا كان الاستبدال بأسلوب RC يعيق الطريق ، أو إذا كنت بحاجة إلى بادئة أو لاحقة
مسافة بيضاء في متغيرات التكوين الخاصة بك ، ثم يمكنك إيقاف تشغيل الاستبدال بنمط RC عن طريق الضبط
المتغير "makepp_simple_concatenation = 1". يمكنك إيقاف تشغيله عالميًا بناءً على الأمر
خط أو كمتغير بيئة. أو على أساس كل ملف عن طريق تعيين المتغير في
ملفك. يجب أن تفعل هذا بالقرب من الجزء العلوي من makefile ، وإلا فقد تصادف
مواقف مضحكة حيث يتم استخدام أسلوب الاستبدال RC في بعض التقييمات دون غيرها.
(ستستخدم كل التعبيرات التي تم تقييمها قبل الواجب الاستبدالات بنمط RC ، وكلها
لن يتم تقييم التعبيرات بعد ذلك. منذ وقت تقييم التعبيرات في
makefiles معقدة وليست واضحة دائمًا من ترتيب البيانات في
makefile ، من الأفضل تعيين "makepp_simple_concatenation" في أقرب وقت ممكن.) يمكنك
حتى قم بتعيينه لهدف واحد فقط:

الهدف: makepp_simple_concatenation = 1
استهداف:
& echo before_first $ (LIST) after_last -o $ (الإخراج)

لأن "$ [VARIABLE]" تم تقييمه قبل "$ (VARIABLE)" ، بدمج الاثنين في rc-
لن يعطي الاستبدال النتيجة التي قد تتوقعها ، إلا إذا قمت بلفها بصيغة صريحة
قائمة:

أ = أب
العدد = 1 2
BAD: = $ (A) $ [N]
جيد: = $ (A) $ ($ [N])

قراءة السطور الأخيرة كـ

BAD: = $ (A) 1 2 # a1 b1 2
جيد: = $ (A) $ (1 2) # a1 a2 b1 b2

الاستبدال مراجع حسابات

مرجع الاستبدال له شكل "$ (VAR: A = B)" ، حيث A هو نمط مطابق و B هو
نمط ليحل محله. مراجع الاستبدال هي اختصار لـ
وظيفة "باتسوبست". على سبيل المثال:

source_files = ac bc cc dc
ملفات_الموضوع = $ (ملفات_المصدر:٪. c =٪. o)

سيعين "$ (object_files)" على "ao bo co do". "٪" هو حرف خاص المطابقات
أي سلسلة عشوائية. إذا بدأ كل من A و B بـ "٪" ، فهذه حالة شائعة عند الاستبدال
اللواحق ، يمكن حذفها:

object_files = $ (source_files: .c = .o)
object_files = $ (source_files: c = o) # نفسه ، لأن. ليس خاصا

بيضاء in المتغيرات

إذا كنت بحاجة إلى التحكم في المسافة البيضاء في متغير ، فيجب عليك (حاليًا) تعطيل rc-style
الاستبدال (عن طريق ضبط "makepp_simple_concatenation = 1") ثم استخدم بناء جملة مثل هذا:

فارغة =
T = -o $ (خالية)

أو بتقييم فارغ:

T = -o $ ()

عند القيام بذلك ، يحتوي المتغير "T" على "-o" متبوعًا بمسافة.

لا يوصى بهذا النوع من الأساليب للتعامل مع المسافات البيضاء. إذا كنت بحاجة إلى المتغيرات
في ملف makefile الخاص بك لاحتواء مسافات ، يجب أن تفكر بجدية فيما تفعله.
إذا كنت بحاجة إلى التعامل مع المسافات ، فمن الأفضل عادةً وضع كود Perl في ملف
makefile للعناية به (باستخدام عبارات "perl_begin" أو "sub") ، أو للتعامل معها
في عبارات شل في إجراءات القواعد.

تظهر هذه الحالات عادةً عندما يحاول الأشخاص استخدام نفس القواعد لمختلف
البنى التي لا تستخدم صيغة أوامر يونكس النموذجية. على سبيل المثال ، في بعض الأحيان يرى المرء
أشياء مثل هذه في makefiles:

ifeq ($ (ARCH) ، غريب الأطوار)
O: = / الإخراج =
آخر
خالية: =
O: = -o $ (خالية)
ENDIF

٪ .o:٪ .c
$ (المترجم) $ (المدخلات) $ (O) $ (المخرجات)

يمكنك القيام بذلك باستخدام makepp إذا كنت تريد ذلك حقًا ، ولكن من المحتمل أن تجد أن ملف
تكون ملفات makefiles أكثر قابلية للقراءة إذا كان لديك متغير أقل تعقيدًا
الاستبدال ، على سبيل المثال ،

ifeq ($ (ARCH) ، غريب الأطوار)
٪ .o:٪ .c
$ (WEIRD_COMPILER) $ (الإدخال) / الإخراج = $ (الإخراج)
آخر
٪ .o:٪ .c
$ (CC) -c $ (المدخلات) -o $ (المخرجات)
ENDIF

لا يُسمح بالمسافات البيضاء مطلقًا في أسماء المتغيرات ، فقط في قيمها. هذا مختلف
من بعض عمليات التنفيذ.

أوتوماتيك المتغيرات
المتغيرات التلقائية هي متغيرات تفترض قيمًا مختلفة بناءً على أي قاعدة
يتم تقييمها في. Makepp يدعم معظم المتغيرات التلقائية الأخرى
إصدارات مفيدة. بالإضافة إلى ذلك ، فإنه يحتوي على أسماء أطول وأقل خفيًا لمعظمهم
التي يمكنك استخدامها بدلاً من ذلك. (بالنسبة لملفات makefiles القديمة التي تحدث لإعادة تعريف هذه الأسماء ، فإن ملف
التعريف في makefile يتجاوز المعنى الافتراضي. على سبيل المثال ، إذا قلت
"target = abc" في ملف makefile الخاص بك ، ثم "$ (target)" سيتوسع دائمًا إلى "abc" ، ولن
أطول يكون مساويًا لـ $ @.)

فيما يلي قائمة كاملة بجميع المتغيرات التلقائية التي يدعمها makepp:

الناتج
الهدف
$ @ هدف القاعدة الحالية. في الواقع ، نظرًا لأن makepp يدعم أهدافًا متعددة لـ
أي قاعدة ، هذا هو أول هدف. على سبيل المثال ، في القاعدة التالية

علامة التبويب ytab.c y.tab.h: المحلل اللغوي
$ (YACC) -o $ (مخرجات) $ (YFLAGS) $ (إدخال)

سيحتوي "$ (output)" على القيمة علامة التبويب y.tab.c. لأن هذه المتغيرات السحرية هي في الواقع
يمكنك أيضًا تمرير فهرس كوسيطة. هذا يعد من 1 أو إلى الوراء
من 1. لذا فإن "$ (output 2)" أو "$ (output -1)" سوف تحتوي على القيمة y.tab.h.

في حين أن جميع الأشكال الثلاثة لهذا المتغير لها نفس القيمة ، إلا أن هناك اختلافًا في
تفسير قواعد الأداة المتعددة. إذا كنت تستخدم الاسم المشفر ذي النمط القديم $ @ ،
سوف يفسر makepp ذلك على أنه مجموعة قواعد قديمة ، بدلاً من قاعدة حديثة
تنتج كل هذه الأهداف دفعة واحدة:

ab: # حقًا: قاعدة واحدة لكل من a و b
المس $ @

cd: # error: mpp يشكو من أن هذا لم يبني د
المس $ (الإخراج)

النتائج
الأهداف
جميع أهداف القاعدة الحالية. مثل "$ (target)" ما لم يكن هناك أكثر من واحد
هدف. في المثال أعلاه ، سيكون "$ (outputs)" هو y.tab.c y.tab.h. يمكنك تمرير ملف
قائمة الفهرس ، لذلك سيكون "$ (المخرجات 2 1)" y.tab.h y.tab.c.

التبعية
إدخال
$ <أول تبعية صريحة للقاعدة. على سبيل المثال ، في هذه القاعدة

٪ .o:٪ .c
$ (CC) $ (CFLAGS) -c $ (إدخال) -o $ (إخراج)

سيكون "$ (input)" اسمًا لملف .c ملف ، بغض النظر عن ماذا .h ملفات makepp
يكتشف. إذا قمت بتحديد أكثر من تبعية واحدة ، فيمكنك الحصول عليها عن طريق تمرير
الفهرس: "$ (input $ (INDEX))" هو التبعية INDEXth.

التبعيات
المدخلات
$ ^ جميع التبعيات الصريحة للهدف ، ولا تشمل .h تم اكتشاف الملفات بواسطة
makepp_scanning ليشمل.

على سبيل المثال ، في القاعدة

myprog.o: * .o
$ (CC) $ (CFLAGS) $ (المدخلات) -o $ (المخرجات)

ستكون "$ (المدخلات)" هي جميع ملفات .o في الدليل. يمكنك اختيار فقط من أنت
تريد عن طريق تمرير قائمة الفهرس. إذا حددت صراحةً أنواعًا مختلفة من الملفات ،
يمكنك اختيارهم كما في "$ (المدخلات 2 3 4)" (لكن مع حرف بدل ، هذا ليس أيضًا
واعدة).

التبعيات المصنفة
تم فرزها
$ + جميع تبعيات الهدف ، بترتيب فرز ، مع إزالة التكرارات.
يعادل "$ (sort $ (inputs))".

التبعيات المتغيرة
المدخلات المتغيرة
$؟ تبعيات الهدف التي تغيرت. وهذا يشمل فقط صريح
التبعيات (أي تلك التي أدرجتها في ملف makefile) ، ولم يتم اكتشافها ضمنيًا
التبعيات من الفحص (مثل ملفات. h).

يستخدم هذا بشكل شائع في أوامر مثل هذا:

libmine.a: $ (الوحدات): build_check ignore_action
$ (AR) ru $ @ $؟

أي، ar يُقال لاستبدال تلك الوحدات التي تغيرت فقط. (لاحظ ال
"ignore_action" إنشاء قاعدة تحقق. إذا لم تحدد هذا ، فسيقوم makepp بفرض ملف
إجراء يتم تنفيذه كلما تغير. إذا لم تتغير أي تبعيات ، فإن ملف
ستكون سلسلة الإجراء "ar ru libmine.a" والتي ربما تكون مختلفة عما كانت عليه
آخر مرة قمت بتشغيله ، لذلك بدون "ignore_action" سيقوم makepp بتنفيذه. في هذا
حالة ، فهي غير ضارة ، ولكن مع أوامر أخرى ، قد تكون مشكلة. يرى
makepp_build_check للحصول على تفاصيل حول "ignore_action".)

إن إنشاء أرشيفات مثل هذه ليست فكرة جيدة لأنها ستقلل من حجم الإنشاءات الخاصة بك
موثوق. تكمن المشكلة في هذا في أنك إذا أنشأت الأرشيف ، فقم بإزالة أحد ملفات
الوحدات من قائمة الوحدات ، ستظل الوحدات في الأرشيف و
com.makepp

صد
$ * الجذع في قاعدة النمط (أي ، مهما كانت "٪" مطابقة). بدلا من ذلك ، إذا كان هذا
ليس قاعدة نمط ، ويعيد اسم الملف بدون الامتداد (على سبيل المثال ، إنه
يعادل "$ (basename $ (input))".

هذا في الغالب للتوافق مع الإصدارات السابقة. على سبيل المثال ، في الإصدارات القديمة من make the
الطريقة الوحيدة لمعرفة كيفية تجميع أي منها .c ملف في المقابل .o كان الملف مثل
هذه:

.co:
$ (CC) $ (CFLAGS) -c $ *. c -o $ *. o

هذه طريقة رديئة لكتابة القاعدة. إن استخدام أسلوب GNU-make أكثر وضوحًا
قواعد النمط ، مثل هذا:

٪ .o:٪ .c
$ (CC) $ (CFLAGS) -c $ (إدخال) -o $ (إخراج)

foreach
اسم الملف الحالي من عبارة "foreach". نادرًا ما تُستخدم عبارات "foreach" ،
لكنها أكثر أنواع قواعد الأنماط ذات الأغراض العامة التي يدعمها makepp. ل
مثال،

#
# إنشاء ملفات .c بنوع من المعالج المسبق الخاص:
#
٪ .c:٪ .k
$ (المعالج) $ (المدخلات)> $ (الإخراج)

#
# ترجمة ملفات .c إلى ملفات. o:
#
٪ .o:٪ .c
$ (CC) $ (CFLAGS) -c $ (إدخال) -o $ (إخراج)

#
# إشارات تجميع بديلة خاصة لملفات .c المشتقة
# من ملفات k:
#
$ (foreach:٪. k =٪. o): $ (foreach:٪. k =٪. c): foreach * .k
$ (CC) $ (SPECIAL_K_FLAGS) -c $ (المدخلات) -o $ (الإخراج)

راجع الوثائق الموجودة في فقرة foreach في القواعد لمزيد من التفاصيل والأمثلة.

$ / هذا هو في الأساس ثابت ، إما "/" ، أو على Windows الأصلي "\". أنت في حاجة إليها ، إذا
تريد أن تبدأ برنامجًا قابلاً للنقل ، على سبيل المثال ، برنامج أنشأته في الدليل الحالي:

مخرجاتي:
. $ / myprog> $ (إخراج)

بالنسبة لأسماء الملفات التي تم تمريرها كوسيطات ، ليس من الضروري أن يتعامل Windows مع نظام Unix
بناء الجملة هناك.

خيار المتغيرات
يمكنك ضبطها بكل الطرق الموضحة أعلاه (ما لم يذكر خلاف ذلك) للتعديل
سلوك makepp. افتراضيا هم جميعا غير معرّفين.

MAKEPP_DEBUG
إذا قمت بتصدير هذا بقيمة حقيقية قبل استدعاء makepp ، فستحصل على مزيد من التصحيح
معلومات. هذا هو "RULE_SOURCE" للملفات التي تم إنشاؤها عندما يكون هذا ساري المفعول في نطاق
makeppinfo و mppi وتفاصيل حول التوسع المتغير ومطابقة القواعد تحت
makepplog ، mppl. سيوضح لك هذا أيضًا ما إذا كان makepp نفد من الذاكرة أو توقف ،
لأنها تتوسع إلى ما لا نهاية في نفس المتغيرات:

A = $ A # تقييم مؤجل ، تحتاج: =
ب = دولار ج
ج = ب دولار

MAKEPP_LN_CP
انظر الملاحظة تحت & ln.

makepp_percent_subdirs
عيّن هذا إلى بعض القيمة الحقيقية (مثل 1) للحصول على "٪" في الأهداف أو التبعيات متطابقة
عبر أكثر من دليل.

makepp_require_phony
اضبط هذا على بعض القيمة الحقيقية (مثل 1) لمنع الزيف الضمني (على سبيل المثال ، إذا كانت هناك قاعدة
تنجح دون أن تنتج هدفها). يجب أن يكون هذا المتغير صحيحًا افتراضيًا ، إلى
منع سلاسل التبعية المعطلة ، ولكن هذا من شأنه أن يكسر التوافق مع الإصدارات السابقة
makefiles قذرة.

makepp_signature_C_flat
هذا خيار للتوقيع C. اضبط هذا على بعض القيمة الحقيقية (مثل 1) لمعاملة
المصادر كما لو كانت مسطحة ، أي جميع الأسطر الجديدة (باستثناء ما حول عبارات المعالج)
يتم التعامل معها مثل المسافة البيضاء ويتم تجاهل توجيهات "# line".

makepp_simple_concatenation
اضبط هذا على بعض القيمة الحقيقية (مثل 1) لمنع "استبدال نمط RC".

PERL
يمكنك ضبط هذا على perl الذي تستخدمه بالضبط لتشغيل البرامج النصية في makepp
جناح وتصديره. يمكن أن يساعد هذا في تشغيل البرامج النصية الفرعية بنفس لغة perl. هذا هو
مفيدة في الغالب لمجموعة الاختبار والتثبيت والبنيات العودية.

VPATH
يؤدي تعيين هذا المتغير إلى قيمة ما إلى استدعاء "قيمة vpath٪".

معرفة مسبقا المتغيرات
يحدد Makepp مسبقًا بعض المتغيرات التي يمكنك تجاوزها:

AR الافتراضي: "ar".

أرفلاج
الافتراضي: "rv".

AS الافتراضي: "مثل".

CC الافتراضي: أول ما تم العثور عليه بين "gcc" أو "egcc" أو "pgcc" أو "c89" أو "cc" أو على Windows
بالإضافة إلى "cl" أو "bcc32".

CFLAGS
الافتراضي: إذا كان "$ (CC)" مترجم GNU "-g -Wall" ، إذا كان أحد نظامي Windows
المترجمون لا شيء ، آخر "-g".

كوردير
الدليل الذي يوجد فيه ملف Makefile الحالي.

CXX الافتراضي: أول ما تم العثور عليه بين "g ++" أو "c ++" أو "pg ++" أو "cxx" أو "C" "C" أو "aCC" أو على
ويندوز بالإضافة إلى ذلك "cl" أو "bcc32".

CXXFLAGS
الافتراضي: إذا كان "$ (CXX)" مترجم GNU "-g -Wall" ، إذا كان أحد نظامي Windows
المترجمون لا شيء ، آخر "-g".

F77 الافتراضي: أول ما تم العثور عليه بين "f77" أو "g77" أو "fort77".

FC الافتراضي: "$ (F77)".

LD الافتراضي: "لد".

LEX الافتراضي: أول ما وجد بين "ليكس" أو "فليكس".

ليبتول
الافتراضي: "libtool".

جعل
يحتوي هذا المتغير على قيمتين مختلفتين ، اعتمادًا على وجود أو عدم وجود
"-التقليدية-العودية-صنع". يتعرف Makepp عند استخدام هذا المتغير و
إيقاف تشغيل بعض الميزات ، حتى قبل حدوث العودية بالفعل. هذا يمكن أن يكون
غير مرغوب فيه أثناء قيامك بإزالته تدريجيًا ، لذا قم أولاً بتحويل المكالمات إلى ملف
makepp محدد "$ ((MAKE))" ، والذي لن يؤدي إلى إيقاف تشغيل الميزات. لا يجب أن تضبطها
لأن هذا يكسر عملنا العودي الذكي.

أهداف ماككمد
تم تعيين هذا المتغير ولكن لم يتم استخدامه بواسطة makepp. يمكنك الاستعلام عنها لفعل شيء ما فقط إذا
تم طلب هدف معين.

الافتراضي: مهما كانت الأهداف الصريحة للمستخدم (أو استدعاء متكرر) المقدمة.
يكون فارغًا عند إنشاء هدف افتراضي ضمنيًا.

ifneq $ (filter special-target، $ (MAKECMDGOALS))
# special-target هو أحد الأهداف الصريحة الحالية
else ifeq $ (MAKECMDGOALS)
# لا توجد أهداف صريحة
ENDIF

MAKEFLAGS (تم تصديره)
الخيارات القياسية التي تم استدعاء makepp بها. أولئك الذين لديهم حرف واحد
يتم دمج النموذج في البداية بدون علامة "-" رائدة (الجنة تعرف سبب اختيار gmake
لإسقاط "-").

ماكينفو
الافتراضي: "makeinfo".

MAKEPPFLAGS (تم تصديره)
يتم تعيين هذا على نفس قيمة MAKEFLAGS ، ولكن فقط إذا كان هذا المتغير موجودًا في
بيئة makepp.

_MAKEPPFLAGS (مُصدَّر)
الخيارات المحددة لـ makepp اللازمة لتوافق POSIX / gmake ، والتي تجعلها makepp
كان يسمى. هذه في متغير منفصل لذلك لا يمكن كسر makefile القديم
التوافق عن طريق إلغاء ضبط MAKEFLAGS. تم تعيين هذا فقط مع
"-التقليدية-العودية-صنع".

MAKEPP_VERSION
إصدار makepp الذي تستخدمه. إذا كان إصدارًا تجريبيًا ، فسيحتوي على ملف
واصلة متبوعة بـ YYMMDD بالإضافة إلى المزيد من البيانات الداخلية. يمكنك استخدام هذا لـ "ifdef"
لإخفاء بنيات makepp الخاصة من الماركات الأخرى.

الافتراضي: نفس القيمة المعروضة بواسطة "makepp --version"

PWD اسم مستعار لـ "CURDIR".

RM الافتراضي: "rm -f". هذا مخصص لملفات Makefiles القديمة. للجديدة يفضل استخدامها
الأمر المدمج و rm مباشرة. إذا كنت تريد أن تكتب قاعدة نظيفة زائفة ، انظر إلى
الأمر "makeppclean -r" بدلاً من ذلك.

ROOT
المسار النسبي إلى جذر نظام البناء الخاص بك ، أي الدليل الموجود في الأعلى
الذي لديك "ملف RootMakepp (.mk)". إذا لم يكن لديك واحد ، فهذا المتغير هو
فارغة.

SHELL
لا يتم احترام هذا المتغير إلا إذا "قمت بتصديره". في هذه الحالة هو شل
والذي يستخدم لتنفيذ إجراءات غير مدمجة مع بعض الطابع الخاص فيها (عادي
التي يتم تنفيذها مباشرة). في Windows Strawberry أو ActiveState Perl ، إذا كان لديك
قذيفة تشبه يونكس ، يجب عليك بدلاً من ذلك تعيين متغير SHELL على قيمة تنتهي بـ "sh"
أو "sh.exe" قبل استدعاء makepp.

الافتراضي: أول ما تم العثور عليه بين "/ usr / xpg4 / bin / sh" (مثل Solaris) أو "/ sbin / xpg4 / sh"
(على سبيل المثال ، Relant Unix) أو "/ بن / ش".

YACC
الافتراضي: أول ما وجد بين "bison -y" أو "yacc".

المتغيرات و بيرل
يتم تخزين قيم المتغيرات كعدادات Perl عادية ، لذا يمكنك الوصول إليها مباشرة من
كود Perl إذا كنت بحاجة إلى القيام بأي تلاعبات معقدة معهم ؛ انظر makepp_extending
للتفاصيل.

يتم الوصول إلى المتغيرات العالمية من Perl من خلال جعلها مسبوقة بـ "Mpp :: global"
طَرد. في الواقع أي متغير ، غير موجود بعد في makefile الحالي ، والذي أنت
سيصبح التعيين إليه في هذه الحزمة عالميًا منذ ذلك الحين ، كما لو كنت قد أصدرت للتو ملف
بيان "عالمي" لذلك.

هذا الوصول المباشر مع ذلك عرضة للخطأ! قد يكون المستخدم قد تجاوز هذه المتغيرات
في سطر الأوامر أو من خلال البيئة. تم تحميل بعض ملفات makefile الأخرى قبل ذلك
ربما جعل المرء المتغير عالميًا أو هدفًا محددًا. في هذه الحالات لن تفعل
إيجاد قيمة المتغير ، أو عند تعيينه ، قد يزيل خاصية المتغير
(مكافئ لمعدِّل "تجاوز" ، باستثناء تفاصيل الهدف.)

من خلال الوصول المباشر ، يمكنك أيضًا تجاوز توسيع هذه المتغيرات ، إذا كانت من النوع
"=" أو "؛ =". تبدأ المتغيرات الخاصة مثل "$ (CC)" كوظائف ، حتى تصبح كذلك
مخصص ل. لذلك في كثير من الحالات لن ترى قيمتها.

لهذه الأسباب ، من الأفضل ترك makepp يحدد القيمة الصحيحة. يمكنك استخدام ال
متغير "makeperl" ، حيث تم تقييم المتغير قبل الحصول على كود Perl
مترجم:

makeperl {$$ current_value = '$ (MAKEFILE_VAR)'}

إذا كنت بحاجة إلى متغير في makefile perl ، فسيتم تحقيق ذلك عبر متغير Perl
makefile $ على النحو التالي:

perl {$ current_value = $ makefile-> expand_variable ('MAKE_VAR')}

تحصل الدوال دائمًا على الكائن makefile الذي يتم تمريره باعتباره الوسيطة الثانية $ _ [1]:

sub f_f {$ current_value = $ _ [1] -> expand_variable ('MAKE_VAR')}

من المفترض أن يتم استدعاء الأوامر ضمن إجراء القاعدة ، حيث يكون الكائن makefile
يمكن الوصول إليها عبر "$ Mpp :: Subs :: rule -> {MAKEFILE}":

sub c_cmd {$ current_value = $ Mpp :: Subs :: rule -> {MAKEFILE} -> expand_variable ('MAKE_VAR')}

استخدم makepp_variables عبر الإنترنت باستخدام خدمات onworks.net


خوادم ومحطات عمل مجانية

قم بتنزيل تطبيقات Windows و Linux

  • 1
    نظيفة عميق
    نظيفة عميق
    نص Kotlin الذي يرمي إلى بناء جميع الأسلحة النووية
    مخابئ من مشاريع Gradle / Android.
    مفيد عندما يتيح لك Gradle أو IDE
    تحت. تم اختبار البرنامج النصي على
    macOS ، لكن ...
    تنزيل برنامج Deep-clean
  • 2
    الكسوف Checkstyle المكونات في
    الكسوف Checkstyle المكونات في
    المكون الإضافي Eclipse Checkstyle
    يدمج كود Java Checkstyle
    المدقق في Eclipse IDE. ال
    يوفر المكون الإضافي تعليقات في الوقت الفعلي لـ
    المستخدم عن فيك ...
    قم بتنزيل Eclipse Checkstyle Plug-in
  • 3
    com.AstrOrzPlayer
    com.AstrOrzPlayer
    AstrOrz Player هو مشغل وسائط مجاني
    برنامج ، جزء يعتمد على WMP و VLC. ال
    لاعب بأسلوب بسيط ، مع
    أكثر من عشرة ألوان موضوع ، ويمكن أيضا
    ب ...
    تنزيل AstrOrzPlayer
  • 4
    موفيستارتف
    موفيستارتف
    Kodi Movistar + TV es un ADDON para XBMC /
    Kodi que تسمح لك بتوفير واحد
    فك التشفير دي لوس سيرفيسيوس IPTV دي
    Movistar Integrado en uno de los
    المراكز الطبية أماه ...
    تحميل برنامج Movistartv
  • 5
    كود :: بنات
    كود :: بنات
    Code :: Blocks هو برنامج مجاني ومفتوح المصدر ،
    عبر الأنظمة الأساسية C و C ++ و Fortran IDE
    بني لتلبية الاحتياجات الأكثر إلحاحًا
    من مستخدميها. انها مصممة لتكون جدا
    يمتد ...
    تنزيل Code :: Blocks
  • 6
    وسط
    وسط
    وسط أو واجهة ماين كرافت المتقدمة
    وتتبع البيانات / الهيكل هو أداة ل
    عرض لمحة عامة عن Minecraft
    العالم ، دون إنشائه فعليًا. هو - هي
    علبة ...
    تحميل Amidst
  • أكثر "

أوامر لينكس

Ad