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

Ad


OnWorks فافيكون

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

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

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

برنامج:

اسم


makepp_statements - عبارات مختلفة في ملف makefile

الوصف


A: تحميل تلقائى، B: build_cache ،
build_check ، D: "يُعرِّف"، E: تصدير، G: عالمي ، I: ifdef ،
ايفك
ifmakeperl ،
ifndef ،
ifneq ،
ifnsys ،
إذا كانت صحيحة ،
ifperl ،
ifsys ،
إذا كان هذا صحيحا،
-يشمل،
يشمل،
_يشمل، L: load_makefile ، M: يصنع،
ماكيبيرل
ميكاب N: "no_implicit_load" ، P: بيرل
"perl_begin"،
البناء المسبق R: register_command_parser ،
register_input_suffix ،
register_parser ،
مخزن،
مدة العرض، S: التوقيع،
"الفرعية"، V: vpath

البيان هو أي سطر يبدأ بكلمة لا تحتوي على ":". (القولون
يشير إلى أن السطر هو قاعدة.) على سبيل المثال ، هذه هي العبارات:

تشمل extra_rules.mk
Load_makefile subdir

يحتوي Makepp على عدد من العبارات المضمنة التي قد تحتاج إلى استخدامها من حين لآخر.

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

الشرطية
الشرطية عبارة عن عبارات خاصة تتحكم في سطور ملف Makepp
رأينا بالفعل. أبسط شكل (حيث "ifxxx" تعني أيًا من الشرط
البيانات الموثقة أدناه) هي:

ايفكسكس ...
الأسطر التي يتم رؤيتها إذا تم تقييم العبارة على أنها صحيحة
ENDIF

أو:

ايفكسكس ...
الأسطر التي يتم رؤيتها إذا تم تقييم العبارة على أنها صحيحة
آخر
الأسطر التي يتم تقييمها إذا تم تقييم العبارة على أنها خاطئة
ENDIF

هناك أيضًا إمكانية لعمل مجموعات معقدة مثل هذا:

ايفكسكس ...
و ifxxx ...
و ifxxx ...
أو ifxxx ...
و ifxxx ...
الأسطر التي يتم رؤيتها إذا تم تقييم العبارات المجمعة على أنها صحيحة
وإلا ifxxx ...
أو ifxxx ...
و ifxxx ...
الأسطر التي يتم رؤيتها إذا تم تقييم المجموعة الأولى على أنها خاطئة
ويتم تقييم هذه العبارات المجمعة على أنها صحيحة
آخر
السطور التي يتم رؤيتها إذا كانت العبارات الواردة أعلاه خاطئة
ENDIF

كما هو مقترح من المسافة البادئة ، "و" لديه أسبقية أعلى من "أو". بعبارات أخرى
an "أو" ينتخب بين مجموعتين من "و"ق. قد يكون هناك أي عدد من "و ifxxx" ،
أو ifxxx "` s and "else ifxxx" `s.

تعتبر العبارات الشرطية "ifxxx" فريدة من نوعها من حيث أنها قد تحدث في منتصف القاعدة
الإجراءات ، كما في المثال أعلاه ، دون الإخلال بالقاعدة.

ايفك سلسلة 1 ، string2
com.ifneq سلسلة 1 ، string2
ifeq ($ (STR1)، $ (STR2))
makefile الأسطر إذا كان صحيحا
آخر
makefile الأسطر إذا كانت خاطئة
ENDIF

إذا كانت السلسلتان متطابقتين تمامًا (باستثناء المسافة البيضاء البادئة أو اللاحقة) ، فعندئذٍ
تم استخدام المجموعة الأولى من الخطوط ؛ وإلا يتم استخدام الثانية. شرط آخر هو
اختياري.

هناك صيغتان مقبولتان أخريان لعبارتا "ifeq" و "ifneq":

ifeq سلسلة 1 ، سلسلة 2
سلسلة 1 سلسلة 2

أيهما متكافئ. بالطبع يمكنك اقتباس الأوتار حسب الحاجة.

"ifeq" وأصدقائها "ifneq" و "ifdef" و "ifndef" و "ifperl" و "ifmakeperl" و "ifsys" و
"iftrue" مفيدة بشكل أساسي عندما يكون عليك بناء برنامج تحت عدة مختلفة
الظروف. على سبيل المثال،

BUILD_TYPE: = التصحيح # "التصحيح" أو "الإنتاج"

ifeq ($ (BUILD_TYPE) ، تصحيح)
CFLAGS: = -g
آخر
CFLAGS: = -O2
ENDIF

البرنامج: * .o
$ (CC) $ (CFLAGS) $ (المدخلات) -o $ (المخرجات) $ (LIBS)
ifeq ($ (BUILD_TYPE)، إنتاج)
قطاع $ (الإخراج)
ENDIF

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

إذا كان هذا إصدارًا إنتاجيًا ، فسيتم تجميع جميع الملفات باستخدام خيار "-O2" بدلاً من
الخيار "-g". علاوة على ذلك ، يتم تشغيل البرنامج "strip" على الملف الثنائي الناتج (بتنسيق
إذا صادفت ارتباطًا ببعض المكتبات التي تم تجميعها في وضع التصحيح).

أحيانًا يكون من الأسهل استخدام الوظيفة "$ (if)" أو الوظيفة "$ (perl)"
بدلاً من عبارة "ifeq".

إذا كنت تريد فقط معرفة ما إذا كان الرمز فارغًا أم لا ، فأنت تحتاج فقط إلى توفير ملف
حجة واحدة ، مثل هذا:

ifneq $ (EXE_SUFFIX)
# ماذا تفعل إذا لم يكن $ (EXE_SUFFIX) فارغًا
ENDIF

com.ifdef متغير
com.ifndef متغير
تعمل هذه العبارات بشكل مماثل مع عبارات "ifeq" و "ifneq" ، باستثناء ذلك
يختبرون ما إذا كان أي من المتغيرات معرّفًا أم لا (أي لا يوجد أي متغير
مُعرف). يتم تعريف المتغير إذا:

· تم إعطاؤه قيمة مع تخصيص سابق في makefile. يرى
makepp_variables للحصول على التفاصيل.

· أعطيت قيمة كمتغير Perl في كتلة "perl_begin".

· المتغير موجود في البيئة.

المتغير موجود في سطر الأوامر ، على سبيل المثال ، لاستدعاء makefile الخاص بك ، أنت
كتبته

makepp CFLAGS = -O2

على سبيل المثال،

ifndef CFLAGS
CFLAGS: = -g
ENDIF

في هذه الحالة ، يتم تعيين "CFLAGS" على "-g" فقط إذا لم تكن محددة بالفعل. لاحظ أن
يمكن كتابة هذا البيان بنفس السهولة باستخدام مهمة "؟ =" ، مثل
هذه:

CFLAGS = -g

com.ifperl بيرلكود
com.ifmakeperl بيرلكود
تعمل هذه العبارات بشكل مماثل مع عبارات "ifeq" و "ifneq" ، باستثناء ذلك
الاختبارات في بيرل. الخيار الأول هو رمز Perl العادي ، بينما البديل الثاني
يمر أولاً العبارة من خلال التوسع المتغير Make-style.

الإصدار: = 3.0
# VERSION هي أيضًا متغير Perl تلقائيًا:
ifperl $ VERSION <= 2
CPPFLAGS: = -DNEW
ENDIF
# علامات الاقتباس ضرورية لـ CFLAGS ، لأن Perl ترى القيمة فقط:
ifmakeperl my $$ x = '$ (CFLAGS)' ؛ $$ x = ~ / -g /
CFLAGS: = -g -O2
ENDIF

com.ifsys البدل
com.ifnsys البدل
اختبارات ما إذا كان makepp للنظام الحالي يعمل على يطابق أيًا من أحرف البدل أم لا
أي (أي لا شيء).

ifsys i [3-6] 86
و ifsys Linux SunOS
... # منصة Intel مع Linux أو Solaris
وإلا ifnsys sparc power *
... # ولا Sparc أو PowerPC
ENDIF

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

perl -MConfig -e'print "$ ^ OConfig {qw (archname myarchname)}" '؛ uname -mps

إذا كان هذا صحيحا التعبير
إذا كانت صحيحة التعبير
يختبر ما إذا كان التعبير يتم تقييمه إلى قيمة ما بخلاف الصفر أو السلسلة الفارغة.

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

حدد
{export | global | override} * تحديد
تعريف VARIABLE [مهمة-عامل]
خط القيمة المتغيرة 1
خط القيمة المتغيرة 2
com.endef

تحدد قيمة $ (VARIABLE) لتكون جميع الأسطر بين جملة "تحديد" و
بيان "endef". انظر المتغيرات متعددة الأسطر. يمكن للكلمات الرئيسية "تصدير" و "العالمية"
لا تعطى في نفس الوقت.

بيرل_بداية
هذا هو نفس "perl" ، لكن باستخدام GNU تكوين جملة جملة أسلوب. هذا البيان
يقدم كتلة من التعليمات البرمجية التي يتم تفسيرها حرفيًا بواسطة perl. يمكن أن تكون مفيدة
لتعريف الوظائف ، ولكن يمكنك القيام بذلك بشكل أكثر إيجازًا باستخدام العبارة "الفرعية".
يمكن أن تكون كتلة تعليمات Perl البرمجية في ملفك makefile مفيدة في تنفيذ إجراءات أسهل
بلغة بيرل بدلاً من الدوال والقواعد makepp.

يتم تجاهل باقي السطر الذي يلي عبارة "perl_begin". كل النص
حتى يتم إرسال السطر الذي يبدأ من الهامش الأيسر بـ "perl_end" حرفياً إلى
مترجم بيرل. لا يمكن أن تكون هناك مسافات قبل "perl_end".

أحد الأمثلة التي أستخدمها لهذا هو إنشاء أدلة قد لا تكون بالضرورة
يخرج. من الشائع في ملفات makefiles وضع جميع ملفات .o في دليل فرعي (على سبيل المثال ، ملف
دليل باسم i386الطرق أو سبارك، أو أي شيء يعتمد على نوع الجهاز).
ولكن ماذا لو لم يكن الدليل موجودًا بعد؟ يمكنك جعل كل ملف .o يعتمد على ملحق
دليل فرعي ، ووضع قاعدة في بناء الدليل الفرعي. لكن الأمر أسهل كثيرًا
لفعل هذا:

OBJDIR: = $ (ARCH) # حيث نضع ملفات .o.
بيرل_بداية
-d $ OBJDIR أو mkdir $ OBJDIR ؛ # تأكد من وجود الدليل.
perl_end

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

يتم التعبير عن بعض العمليات بشكل أفضل من حيث التعبيرات النمطية عن makepp
وظائف النص. على سبيل المثال،

بيرل_بداية
إذا ($ ARCH = ~ / ^ i [56] 86 /) {# يمكنك القيام بذلك باستخدام: ifsys i [56] 86
CFLAGS دولار = '-O6-malign-double' ؛ # على أجهزة إنتل> 486 ، هناك
# عقوبة سرعة كبيرة
# للمضاعفات التي ليست رباعية
# محاذاة.
{} آخر
CFLAGS دولار = '-O6' ؛
}
perl_end

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

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

كمثال أخير ، يسهل الوصول إلى بعض المعلومات مباشرة من Perl
من makepp. على سبيل المثال ، يمكنك الوصول إلى كافة معلومات التكوين
التي يعرفها perl عن نظامك ، بما في ذلك كيفية إنشاء مكتبات مشتركة ، وما إلى ذلك.
(اكتب "perldoc Config" إذا كنت تريد معرفة معلومات التكوين الموجودة في Perl
متوفرة.)

بيرل_بداية

استخدام التكوين ؛

$ ARCH = $ Config {'archname'} ؛ # استخدم معرفة بيرل بالعمارة.
CC = $ Config {'cc'}؛ # استخدم نفس مترجم C كما فعلت Perl.
$ SHARED_OBJ_CFLAGS = $ Config {'cccdlflags'} ؛
# الأعلام اللازمة لتجميع الأشياء التي سوف
# اذهب إلى مكتبة مشتركة.
$ SHARED_OBJ_LDFLAGS = $ Config {'ccdlflags'}. "". $ Config {'lddlflags'}؛
# أعلام رابط لإنشاء مكتبة مشتركة.
$ SHARED_CC_LINK = $ التكوين {'ld'} ؛ # الأمر لإنشاء مكتبات مشتركة.

$ SHARED_EXTENSION = $ التكوين {'dlext'} ؛ # امتداد للمكتبات المشتركة.
perl_end

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

libmylib. $ (DLEXT): * .o
$ (SHARED_CC_LINK) $ (المدخلات) -o $ (المخرجات) $ (SHARED_OBJ_LDFLAGS)

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

بيرل بيرلكود
ماكيبيرل بيرلكود
هذا هو نفسه "perl_begin" ، ولكن باستخدام الأقواس ذات نمط Perl. الخيار الأول هو
رمز Perl العادي ، بينما يقوم المتغير الثاني بتمرير العبارة أولاً من خلال Make-
نمط متغير التوسع. لاحظ أن صعوبة تحليل أقواس Perl أدت إلى ذلك
إلى مجريات الأمور البسيطة التالية:

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

· عدا ذلك ، إذا كان قوس الإغلاق في نهاية السطر "perl" فهذا واحد
بطانة.

· وإلا يجب أن يكون قوس الإغلاق في بداية السطر التالي ،
أي لا توجد مسافة بادئة.

للحصول على طريقة فعالة لاستدعاء نصوص Perl النصية ، راجع "تشغيل". بخلاف وظيفة "$ (perl)" ،
يتم تجاهل القيمة المعادة لهذه الكتلة.

تجاوز perl {print "هذه النقطة في makefile \ n"}

بيرل
{
طباعة "وهذا أيضًا \ n" ؛
}

ifdef ضوضاء
بيرل {{
طباعة "بالإضافة إلى هذه \ n"
}}
ENDIF

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

بيرل -d -S mpp ...

من الصعب تعيين نقاط توقف في تعليمات Perl التي لم يتم تحميلها. يمكنك العمل
حول هذا عن طريق وضع هذا السطر في لغة Perl المضمنة ، قبل المكان الذي تريده
خرق:

$ DB :: أعزب = 1 ؛

ثم يمكنك كتابة "c" في موجه مصحح الأخطاء ، للمتابعة حتى تلك النقطة.

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

لمعرفة الاحتمالات الثلاثة لوضع تقويمات الجسم ، انظر الشرح في
بيان "perl".

يتم استدعاء روتين Perl الفرعي عندما يتم عرض عبارة ، أو عند تعبير مثل
شوهد "$ (اسم الكلمات)". على سبيل المثال ، افترض أنك بحاجة إلى التحميل لسبب ما
محتويات ملف إلى متغير. (يمكنك فعل ذلك بالقول
"$ (shell cat filename)" ولكن من الممكن القيام بذلك دون الحاجة إلى استدعاء shell.)
يمكن القيام بذلك عن طريق وضع ما يلي في makefile الخاص بك:

f_file_contents فرعي {
my (ملف $) =_ ؛ # اسم الحجة.
افتح ملفي $ fh، $ أو اموت "$ file: $! \ n"؛
$ / = undef المحلي ؛ # ملف Slurp في قراءة واحدة.
<$ fh> ؛
}

ifdef NEWSUB
makeub f_VAR2
{{
$ (VAR) * 2 ؛
}}
ENDIF

makeub f_VAR1 {$ (VAR) + 1}

الآن ، مع تحديد هذه الوظيفة ، يمكنك الكتابة

X = $ (file_contents filename) # مكافئ لـ builtin $ (& cat filename)

وسيقوم المتغير "$ (X)" بجلب محتويات الملف المحدد في كل مرة يتم فيها ذلك
موسع. استخدم ": =" للقيام بذلك مرة واحدة بالضبط ، أو "؛ =" للقيام بذلك مرة واحدة على الأكثر.

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

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

على سبيل المثال ، ملفك ملف Makepp قد يبدو مثل هذا:

قواعد بناء الملفات التي تعتمد على otherdir / x

more_rules.makepp الملف: otherdir / x
الإجراء لبناء more_rules.makeppfile

التحميل التلقائي more_rules.makeppfile

لاحظ أنه لا يمكننا استبدال "التحميل التلقائي" بكلمة "التضمين" هنا بشكل موثوق ، لأنه إذا
شيء آخر غير القاعدة more_rules.makepp الملف يحاول البناء otherdir / س
أولا ثم more_rules.makepp الملف ربما ستفشل بسبب otherdir / س لن تكون موجودة
حتى الآن ، لأن هناك بالفعل محاولة لبنائه جارية عندما ملف Makepp is
محملة ضمنيًا نيابة عنها.

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

build_cache / المسار / إلى / بناء / ذاكرة التخزين المؤقت
[عالمي] build_cache / المسار / إلى / بناء / ذاكرة التخزين المؤقت
يحدد مسارًا إلى ذاكرة التخزين المؤقت للبناء. راجع makepp_build_cache للحصول على التفاصيل. البناء
يجب أن تكون ذاكرة التخزين المؤقت موجودة بالفعل ؛ راجع "كيفية إدارة ذاكرة التخزين المؤقت للبناء" في makepp_build_cache لـ
كيفية صنعه في المقام الأول. عبارة "build_cache" في تجاوزات makefile
خيار سطر الأوامر "--build-cache" للقواعد في makefile ، ولكن قد يكون كذلك
تم تجاوزه بواسطة معدِّل القاعدة "build_cache" على أساس كل قاعدة.

الكلمة الأساسية "global" قد تسبق هذا البيان بنفس تأثير الأمر
خيار الخط ، أي ينطبق إنشاء ذاكرة التخزين المؤقت في كل ملف makefile. يجب أن يكون هذا أفضل
نظرا في أ ملف RootMakepp للتأكد من أنه يتم رؤيته في وقت مبكر بما فيه الكفاية.

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

build_check طريقة البناء
[عالمي] build_check طريقة البناء
يحدد الأسلوب الافتراضي للتحقق من الإنشاء لجميع القواعد في ملف makefile هذا. يرى
makepp_build_check للحصول على التفاصيل. تتجاوز عبارة "build_check" الامتداد
خيار سطر الأوامر "--build-check-method" لجميع القواعد في makefile ، ولكن قد يكون كذلك
تم تجاوزه بواسطة معدِّل ": build_check" على أساس كل قاعدة.

الكلمة الأساسية "global" قد تسبق هذا البيان بنفس تأثير الأمر
خيار الخط ، أي أن طريقة فحص البناء تنطبق في كل ملف makefile الذي لا يفعل ذلك
تحديد ما يخصها. من الأفضل إعطاء هذا في أ ملف RootMakepp للتأكد من ذلك
ينظر في وقت مبكر بما فيه الكفاية.

حدد "build_check افتراضي" بدلاً من اسم إذا كنت تريد العودة إلى الإعداد الافتراضي.
باستخدام الكلمة الرئيسية "global" ، فهذا يعني طريقة "بالضبط_المطابقة" ، وإلا فإن هذا يؤدي إلى إرجاع
makefile الحالي لعدم وجود طريقة محددة خاصة به.

تصدير VAR
تصدير مهمة
مسار التصدير: = $ (PWD): $ (PATH)

وضع علامة على المتغيرات المحددة للتصدير إلى العمليات الفرعية. انظر ضبط المتغيرات.

شامل VAR
شامل مهمة
MYPROJECT.INFO العالمي = معلومات يمكن رؤيتها في جميع ملفات makefiles

وضع علامة على المتغيرات المعطاة كعالمية لجميع ملفات makefiles. انظر ضبط المتغيرات.

تتضمن MAKEFILE
يؤدي هذا إلى إدراج محتويات makefile آخر في makefile الحالي. يمكن أن يكون
مفيد إذا كان لديك ملفات معيارية مع عدد من القواعد أو المتغيرات ، وكل منها
الدليل يحتاج فقط إلى إجراء بعض التعديلات. يتم استخدام عبارة "include" أيضًا
ليتم استخدامها بشكل شائع في عمليات التصنيع التقليدية جنبًا إلى جنب مع ملف التضمين التلقائي
الماسحات الضوئية ، ولكن لم يعد هذا ضروريًا مع makepp.

يعتبر "include" أولاً الدليل الحالي ، ثم الأصل الحالي
الدليل ، ثم الأصل ، وما إلى ذلك. يتوقف عن النظر في الدلائل عندما يصل إلى
جذر نظام الملفات أو عندما يتغير معرّف جهاز نظام الملفات. (هذا يعني ذاك
لن تجد الملفات الموجودة في حوامل NFS الأخرى. هذا لمنع المشاكل مع
أنظمة ملفات الشبكة أو أجهزة الكمبيوتر والخوادم الميتة.) إذا لم يتم العثور على ملف
الاسم المحدد في الوقت الذي يتم فيه إيقاف البحث ، ثم يبحث في بيانات makepp
الدليل (/ usr / local / share / makepp إذا قمت بتثبيت makepp في / البيرة / المحلية) لأحد
تضمين الملفات التي تأتي مع makepp.

إذا كنت تريد تضمين ملف قالب في كل ملف makefile في دليل كامل
التسلسل الهرمي ، يمكنك وضع قالب makefile الخاص بك في الدليل العلوي. الماكيفيلز
لا يجب أن تعرف بالضبط مكان وجودهم في التسلسل الهرمي ؛ يمكن أن يحتوي كل ملف
خط مثل هذا:

تشمل standard_definitions.mk

بدلاً من شيء أكثر تعقيدًا ، مثل هذا:

include ../../../standard_definitions.mk # هل هذا هو العدد الصحيح من ..؟

يمكنك تحديد أي عدد تريده من الملفات ، والمتغيرات مسموح بها:

تضمين file1 file2 file3 $ (other_include_files)

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

تشمل $ ​​(TOPDIR) /standard_rules.mk

و انت تريد القواعد القياسية أن تكون مختلفًا في صناعة GNU و makepp. لتسهيل
هذا ، بيان "تضمين" أول يبحث عن ملف له لاحقة .makepp قبل
تبحث عن الملف الذي طلبته. في هذه الحالة ، سيبحث أولاً عن ملف
تسمى Standard_rules.mk.makepp، وإذا كان ذلك موجودًا ، فسيتم تحميله بدلاً من
القواعد القياسية. بهذه الطريقة ، عندما تقوم بتشغيل ملف makefile باستخدام GNU make ، فإنه يتم تحميله
القواعد القياسية، ولكن مع makepp ، يتم تحميله Standard_rules.mk.makepp.

لأن العديد من الملفات القديمة تضع القاعدة لإنشاء ملف التضمين بعد التضمين
بيان ، makepp سوف يؤجل اتخاذ القرارات بشأن غير موجود أو التي لا معنى لها يشمل حتى النهاية
من تحميل makefile. هذا هو ، ما لم يتم استدعاؤها مع "- rm-stale". لأكبر عدد ممكن
مرات كما تحسن الوضع بحلول ذلك الوقت (لأن القاعدة ظهرت) سوف makepp
أعد تحميل ملف makefile ، مما قد يؤدي إلى ظهور المزيد من هذه القواعد مرة أخرى. هذا واضح
طريقة غير فعالة لتحميل ملفات makefiles ، لذا حاول تجنب ذلك. والأسوأ من ذلك ، إذا كان ملفك الخاص
التحميل له آثار جانبية (مثل إلحاق متغير عالمي أو سطر مثل
"do_it_now: = $ (shell cat a >> b)" أو ما يعادله makepp "& cat a -o >> b") سيفعلون
يحدث عدد المرات التي يحتاج فيها ملف makefile إلى التحميل ، لذا ، مرة أخرى ، حاول تجنب ذلك!

_يشمل MAKEFILE
-تضمن MAKEFILE
هناك متغير ثانوي على "include" ، تتضمن عبارة "_include" الملف إذا كان موجودًا
ولكن لا يولد خطأ فادحًا إذا لم يحدث ذلك. تم استخدام عبارة "_include" في
يكون مهمًا لتضمين مسح الملف باستخدام GNU make ، ولكنه أقل فائدة لـ makepp.

تحميل ملف / بعض / دليل / مكان ما / Makefile
تحميل ملف سوبدير
تحميل ملف VAR1 = القيمة 1 VAR2 = القيمة 2 سوبدير
يؤدي هذا البيان إلى makepp إلى cd إلى الدليل الذي يحتوي على ملف makefile والتحميل
قواعدها في قاعدة بيانات makepp الداخلية. إذا قمت بتحديد دليل فقط بدلاً من
ملف makefile أو "load_makefile" يبحث عن "Makeppfile" أو "makefile" أو "Makefile" في ذلك
الدليل.

أي متغيرات تحددها بالصيغة "VAR = value" (أو "VAR =" value1 value2 ") هي
مرت إلى makefiles المحملة. يتجاوزون أي إعدادات في تلك makefiles ، فقط
كما لو كنت قد كتبتها في سطر الأوامر.

استخدام "load_makefile" يختلف عن الأمر

تشمل دير / makefile

بطريقتين. أولاً ، لا ينقل "load_makefile" أي متغيرات من الأعلى-
مستوى makefile في makefile المرؤوس ؛ كل makefile موجود في حد ذاته
مساحة الاسم. لا يمكن لملف makefile التابع أن يؤثر على المتغيرات في المستوى الأعلى
صنع بأي شكل من الأشكال.

ثانيًا ، يتم تمييز كل أمر بناء بدليل makefile الذي جاء به
من. عندما ينفذ makepp قاعدة من ملف makefile مختلف ، يكون أول قرص مضغوط لـ
دليل يحتوي على هذا makefile قبل تنفيذ الأمر. Makefiles التي هي
يتم التعامل مع عبارة "include" في الواقع كجزء من makefile
تضمينها ، وبالتالي لا يتم تمييز قواعدها بدليل مختلف.

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

لا يمكنك استخدام "load_makefile" لتحميل العديد من ملفات makefiles التي تنطبق على نفسه
الدليل. استخدم "include" لعدة أجزاء من makefile تنطبق على نفسه
الدليل ، و "load_makefile" لملفات makefiles التي تنطبق على أدلة مختلفة.

no_implicit_load
يقوم هذا البيان بإيقاف التحميل الضمني لملفات makefiles من مجموعة من الدلائل.
يمكن أن يكون هذا مفيدًا إذا كنت تريد تحميل ملفات makefiles تلقائيًا من معظم الدلائل ،
ولكن هناك بعض الدلائل التي لأسباب مختلفة لا تريد makepp إليها
محاولة التحديث. (على سبيل المثال ، ربما يحتوي الدليل على ملف makefile لبعض الإصدارات الأخرى
التي لا يفهمها makepp.) على سبيل المثال ،

no_implicit_load dir1 dir2 / *

ستؤدي العبارة أعلاه إلى إيقاف التحميل الضمني لملفات makefiles في "dir1" و من جميع of
انها الدلائل الفرعية. كما أنه سيتحول إلى تحميل makefile الضمني للجميع
الدلائل الفرعية لـ "dir2" (وجميع أدلةها الفرعية) ، ولكن ليس لـ "dir2" نفسها.

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

no_implicit_load $ (filter-out dir1 dir2، *)

سيؤدي إلى إيقاف التحميل الضمني لجميع الدلائل الفرعية باستثناء dir1 و dir2 وعلى
الدلائل الفرعية.

البناء المسبق الهدف
جعل الهدف
يتم إنشاء الحجج (التي تخضع لتوسيع متغير بأسلوب Make) على الفور.
يكون هذا مفيدًا عندما تعتمد قائمة الأهداف التي يمكن لملف Makefile إنشاؤها على ملف
ملف تم إنشاؤه في دليل آخر.

حاليًا ، سيفشل بهدوء في بناء الأهداف إذا كانت هناك حلقة تبعية بين
الأهداف التي تم إنشاؤها مسبقًا وملفات Makefiles التي يجب تحميلها من أجل بنائها ، ولكن ذلك
يجب التعامل معها على أنها خطأ.

Register_command_parser أمر_كلمة محلل
Register_parser أمر_كلمة محلل
عند تحليل إجراءات القواعد معجمًا ، استخدم محلل For أمر_كلمة، والتي قد تكون
المسار الكامل أو الاسم الأساسي فقط. عادة ما يكون الاسم الأساسي كافيًا لأن المعجم
يحاول كلاهما.

محلل قد يكون إما اسم فئة مع أو بدون بادئة
"Mpp :: CommandParser ::". يجب أن تحتوي هذه الفئة على وظيفة عضو تسمى "مصنع"
يقوم بإرجاع كائن من تلك الفئة. إذا كان اسم الفئة يحتوي على نقطتين ، فيجب أن يكون
مقتبس ، حتى لا يبدو هذا الخط وكأنه قاعدة.

أو ، نظرًا لأن هذه الفئة لم يتم تحميلها بعد ، فقد تكون وظيفة المصنع بدلاً من ذلك
يقيم في مساحة الاسم Makefile. هذه الوظائف لها بادئة "p_" والتي يجب أن تكون
لا تعطى. هذه هي حالة الموزعين المدمجين.

التأثير مشابه لخيار القاعدة ": parser". ولكن لقواعد القيادة المتعددة
هذه هي الطريقة الأفضل.

Register_input_suffix أمر_كلمة لاحقة
أضف "لاحقة" ... إلى قائمة لواحق ملف الإدخال التي تم التعرف عليها عند إجراء ما
التي تبدأ بـ "command_word" يتم تحليلها. يقوم المحلل اللغوي عادةً باختيار هذا عبر
Mpp :: CommandParser :: input_filename_regexp ، لكنه قد يتجاهل هذا تمامًا بدلاً من ذلك.

لا يلتقط المحللون عادةً كل الحجج التي لم يتم التعرف عليها كخيارات ،
لأنها قد تكون حججًا لخيارات غير معترف بها. (على سبيل المثال، i386v is ليس
ملف إدخال للأمر "gcc -b i386v foo.c".) بدلاً من ذلك ، يتم التقاطهم فقط
الحجج الموضعية التي تشبه أسماء ملفات الإدخال.

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

Register_input_suffix cpp .vpp
٪ .v:٪ .vpp
cpp $ <> $ @

مستودع دليل
مستودع destdir = srcdir
يحدد دليل مستودع تخزين واحد أو أكثر. يحتوي المستودع الأول المحدد على
الأسبقية على الملفات الأخرى إذا كان الملف نفسه موجودًا في مستودعات متعددة وهناك
ليس أمر بناء لذلك. راجع makepp_repositories لمزيد من التفاصيل حول
المستودعات.

إذا قمت بتحديد دليل فقط بعد "المستودع" ، يتم ربط محتوياته بامتداد
الدليل الحالي. يمكنك ربط محتوياته بأي مكان عشوائي في الملف
النظام من خلال تحديد الموقع قبل علامة يساوي ، على سبيل المثال ،

المخزن subdir1 / subdir2 = / users / joe / joes_nifty_library

يجب عليك وضع بيان المستودع بالقرب من أعلى ملف makefile الخاص بك ، قبل أي ملف
القواعد التي قد تحتاج إلى استخدامه.

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

يتم اجتياز تبعيات وقت التشغيل بشكل متكرر ، لذلك إذا كان الحرف "a" يعتمد على وقت التشغيل
تعتمد "b" و "b" وقت التشغيل على "c" ، ثم أي قاعدة تستخدم "./a" سيكون لها
التبعيات الضمنية على كل من "b" و "c" (ما لم تستخدم خاصًا
فئة "Mpp :: CommandParser" التي تتجاوز هذا السلوك).

لاحظ أنه لن يتم بالضرورة إضافة التبعيات المفقودة بعد إضافة هذا البيان
إلى makefile ، ما لم يتم إعادة فحص القاعدة. استخدم سطر الأوامر "--force-rescan"
خيار لضمان حدوث ذلك.

توقيع الاسم
التوقيع [العالمي] [تجاوز] الاسم
توقيع md5
التوقيع ج
التوقيع c_compilation_md5
xml التوقيع
xml-space
التوقيع الافتراضي

يضبط طريقة التوقيع لجميع القواعد التي تتبع بيان "التوقيع" ، والتي من أجلها
لا يوجد محلل أوامر يختار طريقة. يمكنك تجاوز هذا للقواعد الفردية باستخدام
معدِّل قاعدة ": التوقيع".

إذا أضفت الكلمة الأساسية "override" ، فستتجاوز هذه الطريقة حتى الاختيار
تم إجراؤه بواسطة موزعي الأوامر ، ولكن ليس تلك المحددة باستخدام معدِّل القاعدة ": signature".
إذا أضفت الكلمة الرئيسية "global" ، فسيتم تطبيق التأثير على جميع القواعد التي لم تتم قراءتها بعد ،
ما لم يكن لملفهم أيضًا بيان "توقيع" خاص به. هذا يعادل
خيار سطر الأوامر "--signature" إذا تم تقديمه قبل قراءة أي قاعدة ، على سبيل المثال في a
ملف RootMakepp للتأكد من أنه يتم رؤيته في وقت مبكر بما فيه الكفاية. وبالمثل ، فإن الكلمات الرئيسية "عالمية
override "لهذه العبارة تعادل سطر الأوامر" --override-signature "
الخيار.

حدد "التوقيع الافتراضي" بدلاً من الاسم إذا كنت تريد العودة إلى الإعداد الافتراضي.
باستخدام الكلمة الرئيسية "global" ، فهذا يعني وقت التعديل البسيط وحجم الملف
طريقة. وإلا فإن هذا يعيد ملف makefile الحالي إلى عدم وجود طريقة خاصة به ،
باستخدام طريقة عالمية إذا تم تعيين واحد.

لمزيد من المعلومات حول طرق التوقيع ، راجع makepp_signatures.

vpath النمط دليل
إحضار جميع الملفات التي تطابق النمط من كل دليل محدد. قد يحتوي النمط على
معظم أحرف البدل "٪". يستخدم هذا آلية المستودع الشفافة (على عكس gmake
الذي يعيد كتابة أسماء الملفات) ، لكنه لا يتكرر في الدلائل الفرعية.

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

كما هو الحال مع جميع العبارات ، يتم اعتبارها على هذا النحو ، إذا تم وضع مسافة بادئة لها أقل من
إجراءات القاعدة السابقة ، إن وجدت.

يمكن استخدام هذا لإخراج الرسائل أثناء قراءة ملف makefile:

& echo قيمة $$ (VAR) هي $ (VAR)

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

ifperl! -d "تشمل"
& mkdir -p include # إنشاء فقط إذا لم تكن موجودة
ENDIF

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


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

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

أوامر لينكس

Ad