OnWorks Linux و Windows Online WorkStations

الشعار

استضافة مجانية على الإنترنت لمحطات العمل

<السابق | المحتويات | التالي>

بناء البرنامج

تُبنى معظم البرامج بتسلسل بسيط يتكون من أمرين:



./configure جعل

./configure جعل


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



[me @ linuxbox diction-1.11] $ . / تكوين

[me @ linuxbox diction-1.11] $ . / تكوين


سيخرج التكوين الكثير من الرسائل أثناء اختباره وتكوينه للبناء. عندما ينتهي ، سيبدو كما يلي:



التحقق من وجود libintl.h ... نعم التحقق من libintl.h ... نعم

التحقق من وجود مكتبة تحتوي على gettext ... لا شيء مطلوب تكوين: إنشاء ./config.status

config.status: إنشاء Makefile config.status: إنشاء diction.1 config.status: إنشاء diction.texi config.status: إنشاء diction.spec config.status: إنشاء style.1 config.status: إنشاء اختبار / rundiction config.status: إنشاء config.h [me @ linuxbox diction-1.11] $

التحقق من وجود libintl.h ... نعم التحقق من libintl.h ... نعم

التحقق من وجود مكتبة تحتوي على gettext ... لا شيء مطلوب تكوين: إنشاء ./config.status

config.status: إنشاء Makefile config.status: إنشاء diction.1 config.status: إنشاء diction.texi config.status: إنشاء diction.spec config.status: إنشاء style.1 config.status: إنشاء اختبار / rundiction config.status: إنشاء config.h [me @ linuxbox diction-1.11] $


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

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



[me @ linuxbox diction-1.11] $ أقل Makefile

[me @ linuxbox diction-1.11] $ أقل Makefile


جعل يأخذ البرنامج كمدخلات أ MAKEFILE (والتي تسمى عادة ماكيفيلي) ، يصف العلاقات والتبعيات بين المكونات التي يتكون منها البرنامج النهائي.

يعرّف الجزء الأول من ملف makefile المتغيرات التي يتم استبدالها في أقسام لاحقة من ملف makefile. على سبيل المثال نرى الخط:



CC = دول مجلس التعاون الخليجي

CC = دول مجلس التعاون الخليجي


الذي يعرّف مترجم C ليكون دول مجلس التعاون الخليجي. لاحقًا في ملف makefile ، نرى مثيلًا واحدًا حيث يتم استخدامه:


الالقاء:

diction.o جملة.o منوعات getopt.o getopt1.o

$ (CC) -o $ @ $ (LDFLAGS) diction.o crime.o misc.o \ getopt.o getopt1.o $ (LIBS)

الالقاء:


صورة

يتم إجراء استبدال هنا والقيمة $ (CC) لقد بدل بواسطة دول مجلس التعاون الخليجي في وقت التشغيل.

صورة

يتكون معظم ملف makefile من سطور تحدد ملف الهدف، في هذه الحالة الملف القابل للتنفيذ أسلوبوالملفات التي يعتمد عليها. تصف الأسطر المتبقية الأمر (الأوامر) اللازمة لإنشاء الهدف من مكوناته. نرى في هذا المثال أن الملف القابل للتنفيذ أسلوب (أحد المنتجات النهائية) يعتمد على وجود diction.o, الجملة, متفرقات, getopt.oو getopt1.o. في وقت لاحق ، في ملف makefile ، نرى تعريفات لكل من هذه كأهداف:


diction.o:

getopt.o: getopt1.o: Misc.o:

diction.c config.h getopt.h متفرقات جملة. h

getopt.c getopt.h getopt_int.h getopt1.c getopt.h getopt_int.h Misc.c config.h Misc.h

diction.o:

getopt.o: getopt1.o: Misc.o:


الجملة. o:

style.o:

الجملة. c config.h منوعات. h

style.c config.h getopt.h متفرقات جملة. h

الجملة. o:

style.o:


صورة

ومع ذلك ، لا نرى أي أمر محدد لهم. يتم التعامل مع هذا من خلال هدف عام ، في وقت سابق من الملف ، يصف الأمر المستخدم لتجميع أي منها .c ملف في ملف .o ملف:



.co:

$ (CC) -c $ (CPPFLAGS) $ (CFLAGS) $

.co:

$ (CC) -c $ (CPPFLAGS) $ (CFLAGS) $


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


[me @ linuxbox diction-1.11] $ جعل

[me @ linuxbox diction-1.11] $ جعل


جعل سيتم تشغيل البرنامج باستخدام محتويات ماكيفيلي لتوجيه أعمالها. سينتج الكثير من الرسائل.

عندما ينتهي ، سنرى أن جميع الأهداف موجودة الآن في دليلنا:



[لي @ لينوكس بوكس

الإملاء 1.11] $ ls

config.guess

de.po

en

تثبيت- sh

الجملة ج

التكوين.ح

أسلوب

EN_GB

ماكيفيلي

الجملة

h.in

الالقاء 1

ar_GB.mo

Makefile.in

الجملة

config.log

Diction.1.in

ar_GB.po

متفرقات ج

نمط

config.status

الإلقاء ج

getopt1.c

متفرقات

أسلوب 1

config.sub

diction.o

getopt1.o

متفرقات

أسلوب 1

تكوين

diction.pot

getopt.c

أخبار

النمط ج

config.in

الالقاء

getopt.h

nl

ستايل. o

COPYING

diction.spec.in

getopt_int.h

nl.mo

تجربه بالعربي

de

diction.texi

getopt.o

nl.po

دي

diction.texi.in

تثبيت

README


من بين الملفات ، نرى أسلوب و نمط، البرامج التي شرعنا في بنائها. التهاني بالترتيب! لقد قمنا للتو بتجميع برامجنا الأولى من الكود المصدري!

لكن بدافع الفضول ، دعنا نجري جعل مرة أخرى:


[me @ linuxbox diction-1.11] $ جعل

تقدم: لا شيء يمكن القيام به من أجل "الجميع".

[me @ linuxbox diction-1.11] $ جعل

تقدم: لا شيء يمكن القيام به من أجل "الجميع".


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



[me @ linuxbox diction-1.11] $ آر إم getopt.o

[me @ linuxbox diction-1.11] $ جعل

[me @ linuxbox diction-1.11] $ آر إم getopt.o

[me @ linuxbox diction-1.11] $ جعل


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



[me @ linuxbox diction-1.11] $ ls -l diction getopt.c. ls -l إملاء getopt.c

-rwxr-xr-x 1 me me 37164 2009-03-05 06:14 الإملاء

-rw-r - r-- 1 me 33125 2007-03-30 17:45 getopt.c [me @ linuxbox diction-1.11] $ المس getopt.c

[me @ linuxbox diction-1.11] $ ls -l diction getopt.c. ls -l إملاء getopt.c

-rwxr-xr-x 1 me me 37164 2009-03-05 06:14 الإملاء

-rw-r - r-- 1 me 33125 2009-03-05 06:23 getopt.c [me @ linuxbox diction-1.11] $ جعل

[me @ linuxbox diction-1.11] $ ls -l diction getopt.c. ls -l إملاء getopt.c

-rwxr-xr-x 1 me me 37164 2009-03-05 06:14 الإملاء

-rw-r - r-- 1 me 33125 2007-03-30 17:45 getopt.c [me @ linuxbox diction-1.11] $ المس getopt.c

[me @ linuxbox diction-1.11] $ ls -l diction getopt.c. ls -l إملاء getopt.c

-rwxr-xr-x 1 me me 37164 2009-03-05 06:14 الإملاء

-rw-r - r-- 1 me 33125 2009-03-05 06:23 getopt.c [me @ linuxbox diction-1.11] $ جعل


بعد جعل يعمل ، نرى أنه أعاد الهدف إلى كونه أحدث من التبعية:



[me @ linuxbox diction-1.11] $ ls -l diction getopt.c. ls -l إملاء getopt.c

-rwxr-xr-x 1 me me 37164 2009-03-05 06:24 الإملاء

-rw-r - r-- 1 me 33125 2009-03-05 06:23 getopt.c

[me @ linuxbox diction-1.11] $ ls -l diction getopt.c. ls -l إملاء getopt.c

-rwxr-xr-x 1 me me 37164 2009-03-05 06:24 الإملاء

-rw-r - r-- 1 me 33125 2009-03-05 06:23 getopt.c


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


مهم جدا مع المشاريع الكبيرة. تذكر أن Linux kernel (برنامج يقوم بتعديل وتحسين مستمر) يحتوي على العديد منها مليون أسطر من التعليمات البرمجية.


أفضل الحوسبة السحابية لنظام التشغيل في OnWorks: