Make – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
גירסא התחלתית. כתיבה ברצף ללא וידוא פרטי הפרטים וללא שום קישורים
 
הוספת קישורים פנימיים
שורה 1:
'''make''' הוא הוא [[כלי תכנות|כלי תכנה]] המשמש לבניהל[[אוטומציה של בניית תוכנה|בניה אוטומטית]] של קוד[[קובץ ביצועהרצה|קבצי הרצה]] [[ספרייה (תכנות)|וספריות]] מקבצימ[[קוד מקור|קבצי מקור]]. התכנית בגירסתה הראשונית נבנתה ב-[[1976]] כחלק מסביבת [[Unix|יוניקס]] והיא נמצאת בשימוש נרחב עד היום. התכנית מקבלת כקלטכ[[קלט]] [[קובץ]] מסוג makefile שמכיל הוראות בניה לפרויקט מסוים ובונה אותו בפועל.
 
== שימוש ==
השימוש ב-make בא לענות על שתי בעיות עיקריות בפיתוח של פרוייקט תכנה המבוסס על קבצים מרובים של קוד מקור. האחת, במקרה של תלויות בין קבצים, להבטיח שאם אחד הקבצים השתנה יבנו מחדש כל הקבצים התלויים בו. תהליך זה ימשיך באופן [[רקורסיה|רקורסיבי]] בשרשרת התלויות עד שכל הקבצים, ובעיקר קוד הביצוע הסופי יהיו מעודכנים ומתואמים. הבעיה השניה, במקרה של פרוייקט גדול, אם אחד הקבצים השתנה אין צורך לבנות מחדש את כל הקבצים בפרוייקט אלא רק את אלה שתלויים בקובץ שהשתנה.
 
במודל הפשוט ביותר פרוייקט תכנה מורכב מקבצי קוד מקור. כל אחד מהם עובר [[מהדר|הידור]] כדי ליצור קובץ[[קוד מכונהמטרה]] (object code) תואם ב[[שפת מכונה]], ובסופו של דבר קבצי קוד המכונההמטרה [[מקשר (תוכנה)|מקושרים]] יחד כדי ליצור את תכניתהתכנית הביצועלהרצה. אם השתנה אחד מקבצי המקור יש להדר וליצור מחדש את קוד המכונההמטרה של אותו קובץ, ולאחר מכל לקחת שוב את כל קבצי המכונההמטרה וליצור מחדש את קודקובץ הביצועההרצה. אין צורך ליצור מחדש את קבצי המכונה האחרים.
 
make נבנה כדי לשמש בסביבת יוניקס ובשפת הפיתוח [[C (שפת תכנות)|C]], אך העקרונות שבבסיסו נכונים כמעט לכל סביבת ושפה אחרת ובשל פשטותו קל היה להתאים אותו כמעט לכל סביבת פיתוח אחרת. למרות שניתן להשתמש בסביבותב[[סביבת פיתוח משולבת|סביבות פיתוח משולבות]] לניהול תהליך הבנייה, make עדיין נמצאת בשימוש נרחב, במיוחד במערכותב[[מערכת הפעלה דמוית יוניקס|מערכות הפעלה דמויות Unixיוניקס]].
 
מלבד בניית תוכניות, ניתן להשתמש ב- Make לניהול כל פרויקט בו יש לעדכן קבצים מסוימים בכל פעם שקבצים אחרים משתנים.
 
== הסטוריה ==
make נוצר במקור על ידי סטיוארט פלדמן באפריל 1976 במעבדותב[[מעבדות בל]]. סטיוארט מספר שעמיתו סטיב ג'והנסון (היוצר של [[YACC]]) התפרץ ערב אחד למשרדו והתלונן שבזבז יום שלם בנסיון לאתר [[באג]] שכבר תוקן, רק משום שהקובץ המתוקן לא עבר הידור מחדש והתיקון לא בא לידי ביטוי בתכנית הסופית. פלדמן שנתקל בבעיות דומות בעצמו החליט ליצור כלי שיפתור את הבעיה. במהלך סוף שבוע יצר גירסא פשוטה וקריאה במיוחד. למרות המימוש הפשוט היתה לתכנית תרומה רבה ביעילות של עבודת הפיתוח. על בנית make קיבל פלדמן את [[פרס ACM למערכת תוכנה|פרס אגודת ACM למערכת תכנה]] לשנת [[2003]].
 
== הפעלה ==
תכנית make מופעלת כשורתכ[[ממשק שורת פקודה|שורת במעטפתפקודה]] ב[[מעטפת (מחשבים)|מעטפת]] של [[מערכת הפעלה|מערכת ההפעלה]]. למרות ההבדלים והגרסאות המרובות, תראה פקודת ההפעלה בערך כך
<div class="mw-content-ltr">
''make'' -f [makefile] target
</div>
 
 
make היא הפקודה להפעלה (ויכולה להשתנות, לפי שם הפקודה בגירסה המקומית, כגון gmake, nmake וכו')
 
'''make''' היא הפקודה להפעלה (ויכולה להשתנות, לפי שם הפקודה בגירסה המקומיתהמסוימת, כגון gmake, nmake וכו'או nmake)
makefile הוא פרמטר אופציונלי שמציין את שם קובץ ה-makefile. אם לא מצויין, ברירת המחדל היא קובץ ששמו makefile.
 
target'''makefile''' הוא שםפרמטר אופציונלי שלשמציין היעדאת לבצוע,שם המופיע בקובץקובץ ה-makefile. בהעדרואם לא מצויין, יבוצעברירת היעדהמחדל הראשוןהיא בקובץקובץ ששמו makefile.
 
'''target''' הוא שם אופציונלי של היעד לבצוע, המופיע בקובץ ה-makefile. בהעדרו, יבוצע היעד הראשון בקובץ.
 
== Makefile ==
שורה 30 ⟵ 31:
 
קובץ makefile מכיל בעיקר רשימה של יעדים. היעדים ירשמו כך:
 
 
<div class="mw-content-ltr">
target: dep1 dep2 dep3 ...
rule
</div>
שורה 41 ⟵ 40:
'''dep''' זו רשימת התלויות. כל פריט ברשימה יהיה שם קובץ כלשהו או יעד אחר בקובץ makefile. אפשר שהרשימה תהיה ריקה. במקרה זה, היעד יבנה בכל מקרה.
 
'''rule''' זו שורת הפקודה שיש להפעיל על מנת ליצור את היעד. אם כל הפריטים ברשימת התלויות ישנים יותר מהיעד, הפקודה לא תבוצע. במקרים רבים, למשל בהידור של קובץ מקור, הפקודה הדרושה לבניה היא קבועה וידועה מראש לתכניתבתכנית ה-make, ואז אין צורך לפרט אותה.
 
בין יעד ליעד מפרידה שורה ריקה.
שורה 51 ⟵ 50:
 
הפרויקט מכיל שלושה קבצים של קוד מקור - x.c, y.c ו-z.c, ושני קבצי כותרות m.h ו-n.h, ויוצר קוד ביצוע בשם p.exe
 
שם הקובץ הוא makefile
 
<div class="mw-content-ltr">
שורה 76 ⟵ 77:
</div>
 
אםמכיוון שהקובץ נקרא לקובץ בשם makefile אזי הפעלה של פקודת make ללא שום פרמטר תמצא את הקובץ על פי שמו ותבצע את היעד הראשון שמופיע בו. זהו clean, אשר ללא תלות בשום קובץ אחר ימחק את כל קבצי המכונההמטרה שב[[תיקיית שבתיקיהקבצים|תיקיה]]. כדי לבנות את התכנית p.exe נוכל להשתמש למשל בשורת הפקודה הבאה
 
<div class="mw-content-ltr">