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

Ad


OnWorks فافيكون

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

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

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

برنامج:

اسم


makepp_functions - الوظائف في makepp

الوصف


A: اسم الملف المطلق،
مطلق_اسم_الملف_نولينك،
أبسبات,
إضافة بادئة,
إضافة لاحقة,
و، B: الاسم الأساسي, C: مكالمة، D: دير
دير_نوسلاش, E: خطأ، F: ملفات,
منقي،
تصفية،
filter_out_dirs،
إيجاد ملف،
find_first_upwards,
find_program،
سلسلة,
,
متاح أولا،
أول كلمة،
foreach ، I: إذا،
إذا كان هذا صحيحا،
infer_linker,
كائنات الاستدلال,
معلومات J: انضم، M: يصنع،
خريطة,
ماكيبيرل
خريطة،
"مكتيمب"، N: ليسدير, O: فقط_تم إنشاؤه,
فقط_غير أهداف,
فقط_phony_targets,
فقط_قديمة،
فقط_الأهداف,
أو،
أصل، P: باتسوبست,
بيرل
زائفة,
البناء المسبق
طباعة، R: مسار حقيقي,
اسم الملف النسبي،
على صلة قربى ب، S: الصدف،
فرز،
قطاع،
بديل,
لاحقة, T: مؤقت، W: تحذير،
حرف البدل,
كلمة،
قائمة الكلمات،
كلمات، X: com.xargs

أي تعبير بالتنسيق "$(name)"، حيث لا يكون "name" اسمًا لمتغير، أو
يتم تفسير "$(name arg1 arg2 arg3)" على أنه استدعاء دالة. قد يحتوي الاسم على حروف،
الشرطة السفلية، أو الواصلات؛ لتجنب الارتباك، يمكنك استخدام الواصلات أو الشرطة السفلية
بالتبادل، حيث يتم تحويل الواصلات الداخلية إلى شرطات سفلية. تقييم مثل هذا
يستدعي التعبير ببساطة روتينًا فرعيًا لـ Perl. إذا كان "الاسم" مسبوقًا بـ "&" فسيتم تشغيله
أمر مدمج أو برنامج نصي بهذا الاسم ضمن عملية makepp، ويعيد المعيار
انتاج. يتطلب هذا إنشاء لغة Perl لـ PerliIO. إذا كان الاسم لا يذكر وظيفة
يتم تحويله إلى استدعاء المكالمة.

كما هو الحال مع المتغيرات، لديك خيار "$(name ...)" أو "${name ...}". أذا أردت
قم بتضمين نفس القوس، يجب أن يتم إقرانه، ولا يهم الآخر: "$(name
...(){..." أو "${name ...{}(...}". (ولكن بالنسبة للخريطة وبيرل، ينتهي قوس الإغلاق الأول
التعبير.) يتيح المضاعفة للوسائط أن تمتد إلى عدة أسطر. الخطوط الجديدة هي
ثم تعامل كمسافات، باستثناء ربما في "تعريف". يوجد أيضًا بناء الجملة "$[name ...]"
أو $[[name ...]]، والذي يتم تقييمه أثناء قراءة الملف التعريفي، قبل القواعد المزعجة
وغيرها من البنيات.

لدى Makepp عدد من الوظائف المضمنة التي قد تكون مفيدة. وهو يدعم تقريبا كل من
الوظائف النصية لـ GNU make (راجع وثائق GNU make للحصول على التفاصيل)، وبعضها
ملك. يمكنك تحديد إجراءات Perl الفرعية للقيام بكل ما تريد. انظر البيان "الفرعي".
والقسم الخاص بتوسيع makepp لمزيد من التفاصيل.

مشروط وظائف
و الشرط 1 [، الشرط 2 [، الشرط 3 ...]]
توفر الوظيفة "ماس كهربائى" وتشغيل. كل حجة هي
موسعة، بالترتيب. إذا توسعت وسيطة إلى سلسلة فارغة تتوقف المعالجة و
نتيجة التوسع هي السلسلة الفارغة. إذا توسعت كافة الحجج إلى غير
سلسلة فارغة فإن نتيجة التوسيع هي توسيع الوسيطة الأخيرة.

if خيط، النتيجة إذا كانت السلسلة غير فارغة [، نتيجة إذا كانت سلسلة فارغة]
إذا كان هذا صحيحا خيط، النتيجة إذا كانت السلسلة صحيحة [، النتيجة إذا كانت السلسلة خاطئة]
بديل لعبارات "ifeq" وما إلى ذلك. إذا لم تكن السلسلة فارغة (على سبيل المثال،
الشرط صحيح)، يتم إرجاع الوسيطة الثانية (شرط "ثم") (بعد
التوسع المتغير)؛ إذا كانت السلسلة فارغة، فإن الوسيطة الثالثة (عبارة "آخر") هي
عاد.

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

CFLAGS := $(if $(filter gcc egcc, $(CC)), -g -Wall, -g)

يعرّف CFLAGS بأنه "-g -Wall" إذا كان المتغير CC إما "gcc" أو "egcc" و"-g"
خلاف ذلك. (وهذا ما تفعله قواعد البناء الافتراضية.)

"iftrue" يشبه "if"، فيما عدا أنه يتم التعامل مع السلسلة 0 على أنها فارغة.

or الشرط 1 [، الشرط 2 [، الشرط 3 ...]]
توفر الوظيفة أو عملية "قصر الدائرة" أو. يتم توسيع كل وسيطة،
مرتب. إذا توسعت وسيطة إلى سلسلة غير فارغة، تتوقف المعالجة ويتم
نتيجة التوسع هي تلك السلسلة. إذا، بعد توسيع كافة الوسائط، جميعها
فهي خاطئة (فارغة)، فإن نتيجة التوسيع هي السلسلة الفارغة.

قم بتقديم و اسم الملف وظائف
اسم الملف المطلق ملفات
أبسبات ملفات
يحول أسماء الملفات النسبية إلى أسماء مطلقة بدون . or ... على سبيل المثال،
قد يُرجع "$(absolute_filename xyz.c)" "/usr/src/our_project/subdir/xyz.c".

طلق_اسم_الملف_نولينك ملفات
realpath ملفات
مثل اسم الملف المطلق، ولكنه يضمن حل الروابط الرمزية.

basename أسماء
الاسم الأساسي هو اسم الملف بالكامل (مع الدليل)، مطروحًا منه النص الذي يليه و
بما في ذلك الفترة الماضية. على سبيل المثال، "$(basename myfile/version-1.0-module.c)" هو
"ملفي / الإصدار 1.0 الوحدة النمطية"

دير أسماء
يستخرج جزء الدليل من كل ملف في قائمة أسماء الملفات، بما في ذلك الجزء اللاحق
خفض. يُرجع "./" إذا لم يكن هناك دليل في اسم الملف.

dir_noslash اسم الملف
مثل "$(dir )" باستثناء أنه لا يُرجع الشرطة المائلة اللاحقة.

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

$(filesubst ./src/%.c, %.o, $(wildcard src/*.c))

سوف تعمل مع filesubst ولكن ليس مع patsubst.

filter_out_dirs أسماء
إرجاع كافة أسماء الملفات التي لا تشير إلى الدلائل.

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

TCL_INCLUDE := -I$(dir_noslash $(findfile tcl.h, \
/usr/local/stow/tcl-8.4.5-nothread/include \
/usr/include/tcl8.4 / usr / include / tcl \
/net/na1/tcl8.4a3/include /net/na1/tcl8.4a3/include))

يؤدي هذا إلى تحديد موقع الملف tcl.h من خلال البحث في كافة الدلائل المذكورة أعلاه. المطلق
يتم إرجاع المسار إلى الملف. ثم يقوم "$(dir_noslash )" باستخراج هذا الدليل، وهو كذلك
يتم وضعه في مسار التضمين.

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

CC = $(find_program gcc egcc pgcc c89 cc) # وأكثر، حسب الجهاز
F77 = $(find_program f77 g77 fort77)
CXX = $(find_program g++ c++ pg++ cxx CC aCC)

إذا لم يتم العثور على أي من البرامج، فسيُرجع "$(find_program )" السلسلة التي لم يتم العثور عليها، و
يسجل ما لم يتم العثور عليه. لن يؤدي هذا عادةً إلى إنشاء ملف تعريف وظيفي، ولكنه
سوف تميل إلى تقديم رسائل خطأ أفضل. على سبيل المثال، إذا كنت تفعل شيئا من هذا القبيل
هذه:

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

ولم يتمكن makepp من العثور على مترجم C في القائمة أعلاه، فسيقوم باستبداله بـ not Found.
وإلا فإن الصدفة ستحاول تنفيذ الملف المصدر والخطأ الناتج
قد تكون الرسالة غريبة حقًا.

find_upwards اسم الملف
يبحث عن ملف بالاسم المحدد في الدليل ., .., ../ ..، ../../ ..، وما إلى ذلك،
حتى يتم العثور على الملف أو الوصول إلى الدليل الجذر أو تحديد موقع الدليل
على نظام ملفات مختلف. (هذا الشرط الأخير هو منع حدوث مشاكل
أجهزة التثبيت التلقائية أو أنظمة ملفات الشبكة المعلقة.) إذا كان لديك ملف ملف RootMakepp، وهذا أيضًا
حاجز يمنع البحث أعلى.

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

TOP_LEVEL_INCLUDE_DIR:= $(يشمل البحث_الأعلى)
# يبحث عن الدليل الذي يحتوي على
# يشمل الدليل الفرعي.

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

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

أعلى := ../../ ..

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

أعلى := $(dir_noslash $(find_upwards LICENSE))

"$(find_upwards LICENSE)" يُرجع المسار الكامل لملف الترخيص؛
يقوم "$(dir_noslash...)" بإزالة اسم الملف، ويعيد الدليل فقط.

(لاحظ أن عبارة "include" تبحث تلقائيًا عن الملفات لأعلى، لذلك هناك
ليست هناك حاجة للقيام بشيء مثل هذا:

تضمين $(find_upwards top_level_rules.mk)

بدلا من ذلك، يمكنك أن تفعل فقط

تشمل top_level_rules.mk

وسوف تعمل كذلك.)

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

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

$(find_upwards file1 file2)

ما يعادل

$(find_upwards file1) $(find_upwards file2)

إذا كنت تريد البحث عن أي من الملفات، فاستخدم "find_first_upwards" بدلاً من ذلك.

find_first_upwards file1 file2
تتصرف هذه الوظيفة مثل "find_upwards" باستثناء أنها تقوم بإرجاع الملف الأول من أي ملف
الملفات الموجودة في القائمة التي يجدها. على وجه التحديد، فإنه يتحقق من الدليل الحالي ل
أي من الملفات الموجودة في القائمة، وإرجاع الملف الأول الموجود أو الذي يمكن إنشاؤه.
إذا لم يكن أي من الملفات موجودًا أو يمكن بناؤها في هذا الدليل، فإنه يتحقق ..، ثم
../ ..وما إلى ذلك، حتى يصل إلى الدليل الجذر أو الدليل الذي هو
يقع على نظام ملفات مختلف.

متاح أولا file1 file2
قم بإرجاع الملف الأول في القائمة الموجودة أو التي يمكن إنشاؤها. يمكن أن يكون هذا مفيدًا لـ
تكييف ملفات makefiles الخاصة بك للعمل على عدة أجهزة أو شبكات مختلفة، حيث
قد تكون الملفات الهامة موجودة في أماكن مختلفة. على سبيل المثال، وهنا خط من
أحد ملفاتي الصنع:

TCL_LIB = $(first_available \
/usr/local/stow/tcl-8.4.5-nothread/lib/libtcl8.4.so \
/usr/lib/libtcl8.4.so /usr/lib/libtcl.so \
/net/na1/tcl8.4a3/lib/libtcl8.4.a \
/net/na1/tcl8.4a3/lib/libtcl8.4.sl)

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

infer_linker file1 file2
بالنظر إلى قائمة ملفات الكائنات، قم أولاً بإنشائها إذا لم تكن قد تم إنشاؤها بعد. ثم نجد
سواء كانوا يعتمدون على مصدر Fortran أو C++ أو C ويعيدون المقابل
المترجم (الذي يعرف كيفية الارتباط بشكل أفضل من "ld").

infer_objects file1 file2 ...، النمط
$(infer_objects object1.o object2.o, *.o)

إذا كنت تستخدم اصطلاحات قياسية فيما يتعلق بأسماء ملفات الرأس، فإن makepp قادر على ذلك
تخمين الملفات ".o" أو ".lo" التي يجب ربطها ببرنامجك. أنا استخدم هذا ل
اختر الملفات من دليل المكتبة الذي يحتوي على الوحدات النمطية المستخدمة في العديد من البرامج المختلفة
البرامج. بدلاً من إنشاء ملف مكتبة ".a" وجعل الرابط يختار ملف
الوحدات ذات الصلة، يمكن لـmakepp اختيار الوحدات ذات الصلة لك. بهذه الطريقة فقط
يتم تجميع الوحدات ذات الصلة.

تعتمد خوارزمية Makepp لاستنتاج تبعيات الكائنات على الاصطلاح الذي
يتم تنفيذ كافة الفئات أو الوظائف المحددة في ملف الرأس "xyz.h".
تم تجميعها في ملف كائن يسمى "xyz.o" (أو "xyz.lo"). لذا فإن خوارزمية makepp لـ
يبدأ استنتاج تبعيات الكائنات بكائن واحد أو عدد قليل من الكائنات التي نعرف أنها يجب أن تكون كذلك
مرتبطة بالبرنامج. إنه يبحث في الملفات التي تم تضمينها مع "#include" فيها
تلك المصادر، ويحاول العثور على ملفات الكائنات المقابلة لكل من هذه المصادر
الملفات.

يجب ذكر "$(infer_objects )" في قائمة التبعيات الخاصة بالبرنامج، مثل
هذه:

myprog: $(infer_objects main.o Another_object.o, \
**/*.o /other/library/dirs/**/*.o)
$ (CXX) $ (المدخلات) -o $ (المخرجات) $ (LIBS)

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

على سبيل المثال، لنفترض أن "main.o" يأتي من "main.cpp"، والذي يتضمن "my_class.h".
يبحث "$(infer_objects)" عن الملفات التي تحمل الاسم "my_class.o". إذا كان بالضبط واحد من هذا القبيل
تم العثور على الملف، تتم إضافته إلى القائمة. (إذا تم العثور على ملفين كائنين "my_class.o".
في أدلة مختلفة، تتم طباعة رسالة تحذير.) "infer_objects" أيضًا
يقوم بفحص "my_class.cpp" لمعرفة ما يتضمنه وما هي ملفات الكائنات الإضافية
ضمني.

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

يتم استبدال أي عدد من الأحرف الكبيرة "X" في نهاية الوسيطة بهذا العدد الكبير
حروف وأرقام عشوائية. كلما زاد عددها، قلت احتمالية الاصطدام
مع العمليات الأخرى، لذلك إذا أعطيت بادئة مثل "/تمب/اي بي سي."، يجب أن يكون لديك ما يكفي
"X". إذا كان هناك أكثر من X، فإن الحرف الأول يأتي من معرف العملية. لو
لا يوجد أحد، كما لو كان هناك عشرة، وهذا يكفي (8.4e17
الاحتمالات أو 3.7e15 على نظام التشغيل Windows). إذا لم تكن هناك وسيطة، فستكون البادئة افتراضية
"com.tmp."في الدليل الحالي.

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

وأيضًا، نظرًا لأن الأمر مختلف دائمًا، يجب عليك استخدام هذا في إجراء القاعدة فقط إذا كنت تستخدمه
":build_checkignore_action":

TMPFILE ;= $(mktemp) # 1 call; "= يعني 3 مكالمات: 3 ملفات
عدد أ عدد ب: :build_checkignore_action
إنتاج-As-and-Bs >$(TMPFILE)
&grep -c /A/ $(TMPFILE) -o A-count
&grep -c /B/ $(TMPFILE) -o B-count

أو يجب عليك تصديره والسماح لـ Shell بتقييمه:

تصدير TMPFILE؛= $(mktemp)
عدد أ- عدد ب:
Produce-As-and-Bs >$$TMPFILE # makepp لا يرى قيمة var
fgrep -c A $$TMPFILE >A-count
fgrep -c B $$TMPFILE >B-count

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

%.x: %.y
&grep foo $(الإدخال) -o $(mktemp)
&sed bar $(mktemp /) -o $(output) # يعمل على إخراج &grep

notdir أسماء
إرجاع الجزء غير المتعلق بالدليل من اسم (أسماء) الملف، أي كل شيء بعد الأخير
شرطة مائلة إذا كان هناك واحد، أو اسم الملف بأكمله بخلاف ذلك.

فقط_تم إنشاؤه أسماء
يُرجع فقط أسماء الملفات الموجودة في القائمة والتي تم إنشاؤها بواسطة makepp وليس منذ ذلك الحين
تم تعديله وفقًا لملف معلومات البناء.

هذه الوظيفة مفيدة في قواعد الهدف النظيف (على الرغم من أن "makeppclean" هي بالطبع
البديل المفضل):

$ (فوني كلين):
&rm -f $(only_generated **/*)

Only_nontargets أسماء
يُرجع فقط أسماء الملفات الموجودة في القائمة والتي ليست أهدافًا لأي قاعدة (إما
قواعد صريحة أو نمطية). يمكنك تحديد حرف بدل (راجع "$(wildcard )"
وظيفة لمزيد من التفاصيل حول أحرف البدل لmakepp). يمكن استخدام هذا لإنشاء ملف
هدف التوزيع على سبيل المثال:

.فوني: التوزيع

توزيع:
&mkdir منتجنا-$(VERSION)
&cp $(تصفية الخارج %~, $(only_nontargets *)) Our_product-$(VERSION)
القطران cf - منتجنا-$(VERSION) | gzip -9c > Our_product-$(VERSION).tar.gz

في هذه الحالة، يقوم "$(only_nontargets *)" بإرجاع كل ملف في الدليل الحالي
هذا ليس هدفا لبعض القواعد. يقوم "$(filter_out %~,...)" بإزالة المحرر
النسخ الاحتياطية.

على غرار "only_targets" (انظر أعلاه)، يعرف "only_nontargets" فقط الأهداف التي
تم تعريفها بالفعل. هذه مشكلة فقط إذا كنت تستخدمها لتحديد المتغيرات
مع ":=" المهمة؛ إذا كنت تستخدمه في قائمة التبعية أو في نص ملف
القاعدة، سيتم بالفعل رؤية كافة القواعد الأخرى.

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

هذه الوظيفة مفيدة لضمان عدم وجود تبعيات على هذه الملفات،
دون فرض بناء نظيف لجميع الأهداف:

$(تدفق زائف):
&rm -f $(only_stale **/*)

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

Only_targets أسماء
يُرجع فقط أسماء الملفات الموجودة في القائمة والتي تعد في الواقع أهدافًا لبعض القواعد
(إما قواعد صريحة أو نمطية). يمكنك تحديد أحرف البدل (بما في ذلك makepp's
حرف بدل خاص، "**") في أسماء الملفات. (راجع وظيفة "$(wildcard)" للمزيد
تفاصيل. يمكن استخدام هذا لهدف نظيف، على سبيل المثال:

.فوني: نظيف

نظيف:
&rm -f $(only_targets *)

الآن، إذا كتبت "makepp clean"، فسوف يحذف كل ما يعرف كيفية بنائه. لكن
لا تقم بإنشاء هدف نظيف، استخدم "makeppclean" بدلاً من ذلك!

مكان آخر قد يكون مفيدًا فيه هو تجنب تضمين العناصر القديمة .o الملفات في الخاص بك
يبني. على سبيل المثال، إذا قمت بإنشاء مكتبة مثل هذا:

mylib.a: *.o
& rm -f $ (الإخراج)
$ (AR) cr $ (الإخراج) $ (المدخلات)

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

mylib.a: $(only_targets *.o)
& rm -f $ (الإخراج)
$ (AR) cr $ (الإخراج) $ (المدخلات)

ثم لن تحدث هذه المشكلة.

لاحظ أن هذا يشير فقط إلى الملفات المعروفة بأنها أهداف at ال الوقت لصحتك!
استدعاء "الأهداف فقط". إذا ظهرت "only_targets" في التبعيات أو الإجراءات الخاصة بـ a
القاعدة، فإن جميع الأهداف المحتملة ستكون معروفة لأن التبعيات والإجراءات ليست معروفة
يتم تقييمها حتى يتم تنفيذ القاعدة. ومع ذلك، إذا قمت بتقييم حاول تقييمه
في وقت سابق من ملف makefile باستخدام متغير ":=" مثل هذا:

ALL_TARGETS := $(only_targets *)

الهدف 1: التبعية 1
الإجراءات

الهدف 2: التبعية 2
الإجراءات

عندها لن يعرف "only_targets" بالقواعد اللاحقة.

وبالمثل، لا يعرف "only_targets" عن الأهداف التي يتم إنتاجها في ملفات makefiles
محملة بالجعل العودي. (لكن لا ينبغي عليك استخدام التكرار التكراري على أي حال؛ استخدم
استخدم عبارة "load_makefile"، أو تحميل ملف تعريف ضمني بدلاً من ذلك.)

نسبي_اسم الملف file1 file2 ملف 3 [، خفض]
إرجاع اسم تلك الملفات المتعلقة بالدليل الحالي (الملف
ملف التعريف موجود). يمكن أيضًا استخدام هذا لتنظيف "./" غير الضرورية وغيرها من الملفات غير المرغوب فيها
الطريق:

دير := .
سودير := ..
FNAME := $(DIR)/../otherdir/$(SUBDIR)/files
X := $(relative_filename $(FNAME))

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

إذا كان المسار يمر عبر الدليل الجذر، فسيكون الأصل إما للدليل الرئيسي أو
"$(ROOT)" لنظام البناء الخاص بك، أو على نظام التشغيل Windows جذر محرك الأقراص (اعتمادًا على
البيئة، وهذا يحدث أيضا ل / cygdrive / ج or /c)، سيكون المسار المطلق
عاد بدلا من ذلك.

على صلة قربى ب file1 file2 ملف 3 [، الدليل]
إرجاع اسم تلك الملفات المتعلقة بالدليل المحدد. هذا هو
يكون هذا مفيدًا عادةً عندما يتعين عليك، لأي سبب من الأسباب، تنفيذ أمر من ملف
دليل مختلف (الدليل الحالي الافتراضي):

source_backup.tar:
cd .. && tar cf $(relative_to $(output), ..) $(relative_to ., ..)

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

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

$(لاحقة src/foo.c src-1.0/bar.c hacks)

ينتج النتيجة ".c .c".

مؤقت كلمات
دع makepp يعرف أنه قد تتم إزالة الأهداف المحددة بواسطة القاعدة التي تنشئها
هم. يشبه "زائف"، باستثناء أن makepp يتوقع ملفًا حقيقيًا بهذا الاسم
سوف تتأثر بالقاعدة. لا يتم تنفيذ القاعدة إلا إذا كانت مؤقتة
الأهداف قديمة.

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

يدعم Makepp جميع أحرف البدل العادية للقذيفة ("*" و "؟" و "[]"). كما أن لديها ملف
حرف البدل "**" الذي يطابق أي عدد من الأدلة المتداخلة. (كانت هذه الفكرة
مسروقة من zsh.) على سبيل المثال، يتطابق "**/*.c" مع جميع ملفات .c الملفات في المصدر بأكمله
شجرة. "objects/**/*.o" يتطابق مع كافة العناصر .o الملفات الموجودة في أي مكان في
الدليل الأجسام أو أي من أدلةها الفرعية أو أي من أدلةها الفرعية. ال
لن يتبع حرف البدل "**" الروابط الإلكترونية إلى الأدلة على أي مستوى، ولن يفعل ذلك
حاول إدخال الدلائل الموجودة ولكن لا يمكن قراءتها. أيضا الملفات و
لن يتم إرجاع الدلائل الموجودة ولكن لا يمكن قراءتها بواسطة "$(wildcard )".

خيط وظائف
addprefix اختصار، كلمات
يُلحق سلسلة البادئة بكل كلمة من الكلمات. هذا في الغالب من أجل GNU
التوافق؛ باستخدام توسيع نمط RC، يمكن القيام بذلك بطريقة أكثر قابلية للقراءة
مثله:

الوحدات: = abcd
X_OLD_STYLE := $(addprefix $(OBJDIR)/, $(addsuffix .o, $(MODULES)))
X_NEW_STYLE := $(OBJDIR)/$(MODULES).o # أليس هذا أسهل في القراءة؟

يضيف لاحقة, كلمات
يُلحق سلسلة اللاحقة بكل كلمة. هذا في الغالب من أجل GNU
التوافق؛ باستخدام توسيع نمط RC، يمكن القيام بذلك بطريقة أكثر قابلية للقراءة
مثله:

X_OLD_STYLE := $(addsuffix .o, $(MODULES))
X_NEW_STYLE := $(MODULES).o

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

أثناء توسيع الماكرو، المتغيرات المؤقتة $1, $2, "..." الرجوع إلى
الحجج المعطاة لـ "استدعاء" أثناء استدعاءها. المتغير $0 سيتم توسيعها إلى
اسم الماكرو (أي متغير) أن "المكالمة" تتوسع حاليًا.

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

أولا مثال بسيط:

الباقي = $(قائمة الكلمات 2، $(الكلمات $(1))،$(1))
القائمة = ABCDE
لكن أولاً := $(استدعاء الراحة،$(قائمة))

هنا، سيحتوي المتغير "$(butfirst)" على القائمة "BCDE".

والآن للحصول على مثال أكثر تعقيدًا لإظهار ما هو ممكن:

الباقي = $(قائمة الكلمات 2,$(الكلمات $(1)),${1})
mymap = $(إذا $2,$(اتصل بـ $1,$(الكلمة الأولى $2)) $(اتصل $0,$1,$(استدعاء بقية المكالمات,$2)))
الحالة السفلية = ${makeperl lc("$1")}

UCWORDS = كل هذه الكلمات مقلقة
DCWORDS := $(استدعاء mymap,downcase,$(UCWORDS))

الآن يحتوي "$(DCWORDS)" على "كل هذه الكلمات مرتفعة". وبالمناسبة: لا يفعل ذلك
الفرق، ما إذا كنا الوصول إلى الحجج عبر $1, "${1}" or "$(1)" ضمن الماكرو.

يمكنك استخدام المتغير مباشرة كما لو كان دالة، إذا لم يكن هناك
وظيفة بهذا الاسم. يتم تحويل هذا داخليًا إلى "اتصال"، لذلك هذه هي
ما يعادل:

المناقشة = تحول $0 إلى $1 $2.
مباشر = $(مناقشة،وسيطة)
يسمى = $ (مناقشة المكالمة، وسيطة)

قد يبدو الأمر مثيرًا للنقاش حول ما إذا كان "$[call]" يجب أيضًا توسيع "$[]" الخاص بالماكرو
التعبيرات، أو ما إذا كانت الوظيفة يجب أن تفعل الشيء نفسه دائمًا، بغض النظر عن كيفية القيام بذلك
يسمى. تم اختيار الأخير، لأنه سيكون كذلك مع بناء الجملة العادي
من المستحيل تحويل "$[1]، $[2]..." إلى متغير (لن يتم استبدالهم بأي شيء،
حتى قبل إجراء المهمة.) ومن ثم، إذا كان لديك ماكرو لتعريف أ
القاعدة، تريد أن تظهر تعبيرات مثل "$(output)" عند تحليل القاعدة، لذلك
يجب عليك حمايتهم من "الاتصال":

تعريف ميرول
2 دولار: 1 دولار
الأمر الخاص بي $$(الإدخال) -o $$(الإخراج)
com.endef
$[myrule myinput,myoutput]

تصفية أنماط - رسم، كلمات
إرجاع جميع الكلمات في القائمة التي تطابق الأنماط. قد تكون الأنماط ببساطة مختلفة
الكلمات، أو أحرف البدل الخاصة بأسماء الملفات (على سبيل المثال، يتم التعرف على "*" و"؟" و"[az]")، أو قد يتم التعرف عليها
تحتوي على حرف "%"، مما يعني مطابقة أي سلسلة عند تلك النقطة (مثل "*").

تصفية أنماط - رسم، كلمات
إرجاع كافة الكلمات الموجودة في القائمة التي لا تتطابق مع الأنماط. قد تكون الأنماط ببساطة
كلمات أخرى، أو أحرف البدل الخاصة بأسماء الملفات (على سبيل المثال، يتم التعرف على "*" و"؟" و"[az]")، أو
قد يكون لديهم حرف "%"، مما يعني مطابقة أي سلسلة عند تلك النقطة (مثل
"*").

فمثلا:

libproduction.a: $(filter_out test_*, $(wildcard *.o))

سيضع كل شيء .o الملفات الموجودة أو التي يمكن إنشاؤها، باستثناء تلك التي تبدأ بـ تجربه بالعربي_,
إلى libproduction.a.

findstring تجد، in
الإرجاع جد، إذا كانت سلسلة فرعية من in.

أول كلمة كلمات
إرجاع الكلمة الأولى.

رسم خريطة كلمات، بيرلكود
com.makemap كلمات، بيرلكود
ينطبق ذلك على نحو مماثل لخريطة بيرل بيرلكود لكل كلمة على حدة وإرجاع
نتائج. المتغير الأول هو رمز Perl العادي، بينما يمر المتغير الثاني أولاً
رمز Perlcode من خلال توسيع متغير لنمط Make. يتم توسيع الكلمات في كليهما
الحالات.

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

# تبديل الكلمات. الأقواس المزدوجة، للسماح للأقواس في رمز Perlcode، أو استخدم ${}:
X = $((خريطة $(VALUES)، s/(.+)-(.+)/$2-$1/))
# يمكنك استخدام تعبيرات make، ولكن بعد ذلك يجب عليك استخدام $$ لـ Perl $:
Y = $(makemap $(VALUES)، tr/$(OLDCHARS)/$(NEWCHARS)/ أو $$_ = 'فشل')
# يمكنك القضاء على المرشحين:
Y = $(الخريطة $(VALUES)، undef $_ إذا /no_good/)

الانضمام كلمات 1, الكلمات 2
قم بالربط الزوجي للكلمات الأولى والكلمات الثانية.

com.patsubst نمط، بديل، كلمات
إجراء استبدال لكل كلمة في قائمة الكلمات. الحرف "%" يتطابق مع أي حرف
خيط. وأفضل توضيح لذلك هو مثال:

OBJS = $(patsubst %.c, object_dir/%.o, $(C_SOURCES))

يأخذ كل ملف في C_SOURCES ويعيد اسم ملف الكائن في object_dir.
في بعض الأحيان يكون استخدام مرجع بديل أكثر إيجازًا، على سبيل المثال، ما ورد أعلاه
لقد تم كتابتها كما

OBJS = $(C_SOURCES:%.c=object_dir/%.o)

sort word1 word2 word3
فرز الكلمات بالترتيب المعجمي وإزالة التكرارات.

قطاع سلسلة
يزيل المسافة البيضاء البادئة والزائدة من السلسلة ويستبدل كل مسافة بيضاء
تسلسل واحد أو أكثر من أحرف المسافة البيضاء بمسافة واحدة. وبالتالي، "$(strip ab
c)" ينتج عنه "abc".

SUBST من، إلى، النص
إجراء استبدال نصي على النص النصي: يتم استبدال كل تكرار لـ from
بواسطة ل. يتم استبدال النتيجة باستدعاء الوظيفة. على سبيل المثال،

$(subst ee,EE,قدمين في الشارع)

يستبدل السلسلة "fEEt on the strEEt".

كلمة ن، النص
إرجاع nالكلمة ال نص. القيم المشروعة n تبدأ من 1 في البداية
أو للخلف من -1 في النهاية. لو n أكبر من عدد الكلمات في نصأطلقت حملة
القيمة فارغة.

قائمة الكلمات قائمة الفهرسة, كلمات
قائمة الكلمات الفهرس الأول, مؤشر أخير, كلمات
في النموذج الأول، قمت بتوفير قائمة من المؤشرات (العد من 1 في البداية أو
للخلف من -1 في النهاية) لتحديد الكلمات التي تريدها. في النموذج الثاني لك
حدد نطاق الكلمات التي تريد إرجاعها.

كلمات نص
إرجاع عدد الكلمات في نص.

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

هذا المثال البسيط يعين المتغير ملفات إلى قائمة كافة الملفات الموجودة في
الدلائل في القائمة تطبيق الاستعراض المفصل:

دير := abcd
الملفات := $(foreach dir,$(dirs),$(wildcard $(dir)/*))

النص هنا هو "$(wildcard $(dir)/*)". التكرار الأول يجد القيمة "a" لـ dir،
لذلك ينتج نفس النتيجة مثل "$(wildcard a/*)"; التكرار الثاني ينتج
نتيجة "$(wildcard b/*)"; والثالث هو "$(wildcard c/*)".

يحتوي هذا المثال على نفس النتيجة (باستثناء إعداد "dirs") كالمثال التالي:

الملفات:= $(حرف البدل أ/* ب/* ج/* د/*)

عندما يكون النص معقدًا، يمكنك تحسين إمكانية القراءة من خلال إعطائه اسمًا بعلامة
متغير إضافي:

find_files = $(أحرف البدل $(dir)/*)
دير := abcd
الملفات := $(foreach dir,$(dirs),$(find_files))

هنا نستخدم المتغير find_files بهذه الطريقة. نحن نستخدم عادي "=" لتعريف أ
متغير متوسع بشكل متكرر، بحيث تحتوي قيمته على استدعاء دالة فعلي
يمكن إعادة توسيعها تحت سيطرة foreach؛ المتغير الموسع ببساطة لن يفعل،
نظرًا لأنه سيتم استدعاء حرف البدل مرة واحدة فقط في وقت تحديد find_files.

ملاحظة: لا تخلط بين هذا وبين المتغير الخاص "$(foreach)".

info نص
تحذير نص
خطأ نص
نص الإخراج يعيد لا شيء. الأول يذهب إلى STDOUT، والثاني إلى STDERR،
الثالث بالإضافة إلى ذلك إحباط المعالجة.

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

قائمة الملفات :
# أوامر shell لحساب قائمة الملفات التي سيتم وضعها في البرنامج

my_program : $(&cat $(قائمة_ملفات الإنشاء المسبق))

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

file_list ;= $(&cat $(قائمة_ملفات الإنشاء المسبق))

my_program1 : ao $(file_list)

my_program2: بو $(file_list)

إذا قمت بدلاً من ذلك بتحديد "$(&cat file_list)" فقط، فلن يتم فرض makepp
يجب أن يكون file_list محدثًا قبل أن ينفذ أمر shell. باستخدام "$(الإنشاء المسبق )"
هي أفضل طريقة لحل هذه المشكلة. قد تميل إلى تجربة أشياء أخرى، مثل
هذه:

my_program : file_list $(&cat file_list)

لكن هذا لن ينجح لأنه يتم تقييم "$(&cat file_list)" قبل أن يحاول makepp القيام بذلك
أنشئ "قائمة الملفات".

Only_phony_targets أسماء
إرجاع فقط تلك الأسماء الموجودة في القائمة والتي تعد أهدافًا زائفة لبعض القواعد (إما
قواعد صريحة أو نمطية). يمكنك تحديد أحرف البدل (بما في ذلك أحرف makepp الخاصة
حرف البدل، "**") في أسماء الملفات. (راجع وظيفة "$(wildcard)" لمزيد من التفاصيل.
ويمكن استخدام ذلك لتجميع الأهداف، على سبيل المثال:

$(الاختبارات الزائفة): $(only_phony_targets */**/tests)

الأصل متغير
نظرا لاسم المتغير، فإنه يخبرك من أين تأتي قيمته.

بيرل بيرلكود
ماكيبيرل بيرلكود
يقوم بتقييم رمز perlcode في الكتلة وإرجاع النتيجة. البديل الأول هو بيرل عادي
الكود، بينما يقوم المتغير الثاني أولاً بتمرير رمز Perlcode من خلال متغير Make-style
توسيع.

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

حكم الفيديو المساعد = 1
VAR1 = ${بيرل ($VAR + 1) * 3}
VAR2 = $(perl do { $VAR *= 3؛ إرجاع $VAR + 1 } إذا $VAR)
VAR3 = $(makeperl $(VAR1) * 3 + $$VAR) # واحد Make var وواحد Perl var
VAR = $((بيرل إذا( ... ) { ... }))

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

$(زائف الكل): my_program

$ (فوني كلين):
&rm -f *.o my_program

يمكنك أيضًا الإعلان عن هدف واحد أو أكثر باعتباره هدفًا زائفًا باستخدام سطر مثل هذا في أي مكان
ملف التعريف الخاص بك:

.فوني: كلها نظيفة

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

XYZ := $(print $(patsubst %.c, %o, $(SOURCE_FILES)))

سيتم طباعة نتيجة استدعاء "patsubst".

XYZ := $(patsubst %.c, %o, $(print $(SOURCE_FILES)))

سيتم طباعة الوسيطة الأخيرة لاستدعاء "patsubst".

قذيفة قيادة قذيفة
إرجاع الإخراج من أمر الصدفة المحدد، مع استبدال الأسطر الجديدة بمسافات.

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

التاريخ = $(تاريخ الصدفة) # الأفضل: $(التوقيت المحلي العددي لبيرل)
VAR = ${{shell f() { echo hello; }; F}}

com.xargs الأمر،الوسائط[،لاحقة[،الطول]]
إرجاع قائمة أوامر مفصولة بسطر جديد والتي يبدأ كل منها بما هو محدد
الأمر، وانتهي بأكبر عدد ممكن من عناصر القائمة دون تجاوزها
الطول (الافتراضي 1000) حرفًا.

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

$ (فوني كلين):
$(xargs $(RM)، $(only_targets **/*))

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

$ (فوني كلين):
&rm -f $(only_targets **/*)

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

يظهر:
&rm -f $@
&المس $@
$(xargs echo, $(only_nontargets **/*), >> $@)

بعض هذه الوثائق مبنية على وثائق GNU.

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

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


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

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

أوامر لينكس

Ad