أحرف البدل وForeach في Makefile

Ahrf Albdl Wforeach Fy Makefile



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

أحرف البدل في Makefile

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







لاستخدام حرف بدل في ملف تكوين، يجب عليك استخدام الكلمة الأساسية 'حرف بدل' التي تتبع العلامة النجمية '*' أو '؟' التوقيع وامتداد الملف المتصل من خلال نقطة. يمكنك أيضًا استخدام '؟' قم بالتسجيل للبحث عن حرف واحد و'*' لمطابقة أي عدد من الأحرف. وينبغي استخدام هذا الهيكل بأكمله بين قوسين وعلامة '$'. على سبيل المثال، نعلن عن المتغير 'SRCS' الذي يحصل على ملف قيمته عبر حرف البدل. يبحث حرف البدل هذا عن كافة الملفات ذات النمط 'cpp' في نهايتها.





Foreach في Makefile

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





المصادر: = file1.c file2.c file3.c
أشياء := $ ( foreach src,$ ( مصادر ) $ ( سرك:.c=.o ) )
$أشياء : % .O: % ج
$ ( نسخة ) $ ( CFLAGS ) $ < -O $ @

مثال 1: استخدام أحرف البدل

لعرض الرسم التوضيحي وعمل أحرف البدل ووظائف foreach، نقدم ملف C++. يبدأ ملف 'salary.cpp' هذا باستخدام رأس 'iostream' للسماح بالاستخدام السلس لتدفقات الإدخال والإخراج. تعلن الطريقة الرئيسية عن متغير 's' من النوع الصحيح وعبارة 'cout' للمطالبة بقيمة إدخال في وقت التشغيل. يحصل دفق الإدخال القياسي 'cin' على القيمة من المستخدم في وقت التشغيل ويحفظها في المتغير 's'. يعرض 'cout' القيمة التي أدخلها المستخدم على شاشة وحدة التحكم.

#تشمل
استخدام اسم للمحطة؛
انت مين ( ) {
كثافة العمليات الصورة؛
cout << 'أدخل الراتب:' ;
يتناول الطعام >> س؛
cout << ' مرتب: ' << س << نهاية؛
يعود 0 ;
}



نبدأ ملف makefile بالمتغير 'CXX' الذي يحدد المترجم لـ C++، ويحمل المتغير CXXFLAGS إشارات المترجم C++. يحمل المتغير EXECUTABLE اسم ملف 'hello' القابل للتنفيذ والذي يتم إنشاؤه بعد تنفيذ ملف makefile. يحصل متغير SRCS على كافة ملفات C++ من الدليل الحالي باستخدام حرف البدل '*' للبحث في أي نمط ينتهي بـ '.cpp'. يحتفظ متغير OBJS بأسماء ملفات الكائنات التي سيتم إنشاؤها باستخدام متغير SRCS، مع استبدال الامتداد 'cpp' بـ 'o'. يقوم الهدف الافتراضي 'الكل' بإنشاء ملف التعريف ويعتمد على المتغير القابل للتنفيذ.

تقوم القاعدة الأولى بإنشاء ملف 'hello' الهدف الذي يعتمد على ملف كائن متغير OBJS (أسماء ملفات الكائنات) باستخدام أسماء الملفات التي تم إنشاؤها عبر متغير 'OBJS'. تقوم قاعدة makefile الثانية بإنشاء ملف الكائن بامتداد '.o' الذي يعتمد على ملف C++ بعد تجميع ملف التعليمات البرمجية C++. هنا، '%' هو حرف بدل للبحث عن أسماء الملفات لأي نمط ينتهي بـ 'cpp'. في النهاية، يستخدم الهدف النظيف الأمر 'rm' الخاص به لتنظيف الملفات القابلة للتنفيذ وملفات الكائنات التي تم إنشاؤها حديثًا بالقوة من الدليل باستخدام العلامة '-f'.

CXX = ز++
CXXFLAGS = -حائط -الأمراض المنقولة جنسيا =ج++ أحد عشر
قابل للتنفيذ = مرحبا
سركس = $ ( حرف البدل * .CPP )
أوبجس = $ ( SRCS:.cpp=.o )
الكل: $ ( تنفيذ )
$ ( تنفيذ ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O: % .CPP
$ ( CXX ) $ ( CXXFLAGS ) $ < -O $ @
ينظف:
جمهورية مقدونيا -F $ ( تنفيذ ) $ ( OBJS )

عند تشغيل تعليمات 'make'، تم إنشاء كل من الملفين الهدف والكائن. بعد تنفيذ ملف 'hello' القابل للتنفيذ، يطلب من المستخدم إدخال الراتب ونقوم بإضافة '67000'. في النهاية، يتم عرض الراتب مرة أخرى.

يصنع

مثال 2: استخدام Foreach

بعد استخدام أحرف البدل، حان الوقت للاستفادة من وظيفة foreach في makefile. بقية رمز makefile هو نفسه. في السطر 6، قمنا بتهيئة متغير آخر وهو 'NAMES' بقائمة من ثلاث قيم - Kate، Kim، Tim. يعتمد الهدف 'الكل' الافتراضي على المتغير القابل للتنفيذ (اسم الملف الهدف 'hello') وعبارة foreach. تقوم وظيفة 'addprefix' بتكرار المتغير 'NAMES' لإنشاء أسماء الأهداف ديناميكيًا عن طريق البادئة 'run_' في بداية كل اسم في قائمة 'NAMES'.

تشير القاعدة الموجودة في السطر الثامن إلى أن الملف المستهدف القابل للتنفيذ للإخراج، أي مرحبًا، يعتمد على 'OBJS'. تقوم العلامة '-o' بإنشاء ملف الإخراج الهدف باستخدام OBJS. تقوم القاعدة الموجودة في السطر العاشر بإنشاء ملف الكائن الهدف باستخدام الملفات المصدر ذات الامتداد 'cpp'. للقيام بذلك، يتم استخدام العلامة '-c' لتجميع ملف مصدر وإنشاء ملف الكائن ذي الصلة الضروري للجيل المستهدف. في السطر الثالث عشر، نستخدم المتغير EXECUTABLE لإنشاء المخرجات بأسماء مختلفة تبدأ بـ 'run_' كبادئة. في النهاية، سيقوم الهدف النظيف والأهداف الزائفة بإزالة وتنظيف الكائن والملفات المستهدفة.

CXX = ز++
CXXFLAGS = -حائط -الأمراض المنقولة جنسيا =ج++ أحد عشر
# ملف الهدف القابل للتنفيذ
قابل للتنفيذ = مرحبا
سركس = $ ( حرف البدل * .CPP )
أوبجس = $ ( SRCS:.cpp=.o )
#قائمة الأسماء
الأسماء = كيت كيم تيم
#الأهداف
الكل: $ ( تنفيذ ) $ ( addprefix run_، $ ( الأسماء ) )
$ ( تنفيذ ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O: % .CPP
$ ( CXX ) $ ( CXXFLAGS ) $ < -O $ @
# إنشاء أهداف لكل اسم
يجري_ % : $ ( تنفيذ )
. / $ ( تنفيذ ) $*
ينظف:
جمهورية مقدونيا -F $ ( تنفيذ ) $ ( OBJS )
#أهداف زائفة
.فوني: كلها نظيفة

يؤدي استخدام تعليمات 'make' إلى إنشاء هدف 'hello' القابل للتنفيذ وتشغيل البرنامج لكل اسم محدد في المتغير 'NAMES'.

يصنع

يمكنك أيضًا تعديل مخرجاتك باستخدام الاسم من القائمة التي تحتوي على البادئة 'run_'.

اصنع run_Kim

خاتمة

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