עבודה עם makefile

[20 בדצמבר 2007] [3 תגובות]

בוודאי שמתם לב שהידור(קימפול) תוכניות ארוכות צורך זמן רב יותר מאשר הידור תוכניות קצרות, וכמו כן לא תמיד יש צורך להדר את כל התוכנית, אלא רק את החלקים שעודכנו בה.

התוכנה MAKE תעזור לכם לנהל את הידור התוכניות שלכם על ידי כך שתהדר רק את החלקים החדשים שהשתנו מההידור האחרון.

נניח ויש לנו שני קבצי C בשם hello.c ו-helper.c ואנו רוצים להדרם בעזרת שתי שורות הידור, כך:

gcc helper.c -o helper.o -c

gcc hello.c helper.o -o hello.exe

נוכל ליצור קובץ בשם makefile שתוכנו יהיה:

hello: hello.c  helper.o

gcc $? -o $@

helper.o: helper.c

gcc $? -o $@ -c

כעת נריץ את הפקודה:

make

התוכנה תהדר את הקוד לפי תוכנו של הקובץ makefile שיצרנו ותהיה זהה לכתיבת שתי שורות ההידור מלמעלה.

הסבר: השורה:

hello: hello.c  helper.o

אומרת ל-make שאנו רוצים ליצור קובץ בשם hello המשתמש בקבצים: hello.c ו-helper.o

כעת make מחפש אחר הוראות כיצד לייצר את hello.c ואת helper.o, מכיוון שלא כללנו הוראות ליצירת hello.c, התוכנה מניחה כי הקובץ כבר קיים. לעמות זאת, כללנו הוראות להכנת helper.o ולכן יש לבצע הוראה זאת קודם - נביט בהוראות ליצירת helper.o:

helper.o: helper.c

gcc $? -o $@ -c

נשים לב כי אנו רוצים ליצור את helper.o בעזרת helper.c ומכיוון שלא כללנו הוראות עבור helper.c התוכנה מניחה כי הקובץ כבר קיים. כעת התוכנה מפענחת את ההוראה:

  1. בתחילת השורה ישנו רווח הנוצר על ידי המקש [טאב], ללא רווח זה ה-makefile לא יהיה תקין
  2. $? - כאשר make רצה היא מחליפה סימון זה בכל האובייקטים הכתובים מימין לנקודותיים, בדוגמה זאת הוא יחליף את הסימון ב: helper.c
  3. $@ - הסימון יוחלף באובייקט הרשום משמאל לנקודותיים, בדוגמה זאת: helper.o


לאחר כל הפעולות, השורה המתקבלת היא:

gcc helper.c -o helper.o -c

כפי שרצינו. כעת make חוזרת להוראה:

hello: hello.c  helper.o

gcc $? -o $@

כמו מקודם, גם כאן הסימנים $? ו-$@ יוחלפו בערכים המתאימים ותתקבל השורה:

gcc hello.c helper.o -o hello

ובסיום שורה זאת תהודר התוכנית במלואה ויווצר הקובץ hello.exe מוכן להרצה.

 

אם אהבת את הפוסט, אני שולח מדי פעם למייל עוד פוסטים מעניינים שלא תמיד מגיעים להתפרסם באתר. אתה מוזמן להצטרף לרשימה:
(אני שונא ספאם. אני מבטיח לעולם לא לשלוח משהו לא מעניין)

3 תגובות

  1. avraham | 6/6/2010 7:16:25 AM
  2. מאור | 2/8/2014 5:18:17 PM
    אחל פוסט, תודה.
  3. דביר | 1/22/2017 10:56:45 AM
    תודה רבה לכם

הוסף תגובה