הבנת פקודת Unix ו-Linux: make

כלי השירות make קובע אוטומטית אילו חלקים של תוכנית גדולה צריכים להידור מחדש, ומנפיק את הפקודות כדי להדר אותם מחדש. המדריך מתאר את יישום GNU של make, שנכתב על ידי ריצ'רד סטולמן ורולנד מקגראת'.

כלי השירות לעשות אינו מוגבל לתוכניות. אתה יכול להשתמש בו כדי לתאר כל משימה שבה יש לעדכן קבצים מסוימים באופן אוטומטי מאחרים בכל פעם שהאחרים משתנים. הפקודה make משמשת לרוב בתהליך נפוץ לבניית תוכנה מקוד המקור שלה.

גבר משתמש במחשב נייד
lina aidukaite/Moment/Getty Images

כיצד להשתמש בפקודה Make בלינוקס

זוהי דוגמה נפוצה לשימוש בפקודה make בלינוקס. בדרך כלל, זה חלק מתהליך פשוט בן שלושה שלבים לבנות אפליקציות קוד פתוח מקוד המקור שלהן.

דוגמאות אלו מראות תוכניות C מכיוון שאלה הם הנפוצים ביותר, אבל אתה יכול להשתמש ב-make עם כל שפת תכנות שיכולה להריץ את המהדר שלה עם פקודת מעטפת.

  1. התקן את Git, אם אין לך את זה, יחד עם כלי בניית התוכנה.

    apt install git build-essential
  2. בחר אפליקציה לעבוד איתה, או הורד את VLC.

    apt build-dep vlc
  3. שכפל את קוד המקור של VLC.

    שיבוט git https://github.com/videolan/vlc.git
  4. שנה ספריות לקוד המקור של VLC המשובט, והפעל את סקריפט התצורה.

    cd vlc
    ./bootstrap
    ./configure
  5. הפעל את עשה הפקודה יחד עם ה דגל, ואחריו מספר ליבות המעבד/חוטים שיש למערכת שלך.

    לעשות -j4
  6. זה ייקח קצת זמן להשלים. בסיום, התקן את האפליקציה עם לעשות התקנה.

    sudo make install
  7. סיימת.

לעתים קרובות יותר מאשר לא, כך תראה את פקודת make בשימוש. יתכנו הליכים מורכבים יותר מזה או שינויים קלים, אבל זה אף פעם לא מורכב מדי.

איך הפקודה של GNU עובדת?

הסעיף שלהלן הוא פירוט טכני של פקודת make. אם אתה מחפש להפיק את המרב מהתוצרת, עיין באפשרויות שלהלן.

דף זה הוא תמצית של התיעוד של GNU make. הוא מתעדכן רק מדי פעם מכיוון שפרויקט GNU אינו משתמש ב-nroff. לתיעוד מלא ועדכני, עיין בקובץ המידע make.info אשר עשוי מקובץ המקור של Texinfo make.texinfo.

תחביר והכנה של כלי השירות make

התחביר של כלי השירות לעשות הוא עשה makefile ] [ אוֹפְּצִיָה ]... יַעַד...

כדי להתכונן לשימוש ב-make, עליך לכתוב קובץ בשם makefile שמתאר את הקשרים בין הקבצים בתוכנית שלך ומציין את הפקודות לעדכון כל קובץ. בדרך כלל, א קובץ הרצה מתעדכן מקובצי אובייקט, אשר, בתורם, נוצרים על ידי קומפילציה של קובצי מקור.

ברגע שקיים makefile מתאים, בכל פעם שאתה משנה כמה קבצי מקור, הפקודה shell עשה מספיק לבצע את כל ההקומפילציות הנדרשות. תוכנית make משתמשת במסד הנתונים makefile ובזמני השינוי האחרון של הקבצים כדי להחליט אילו קבצים יש לעדכן. עבור כל אחד מאותם קבצים, הוא מנפיק את הפקודות הרשומות במסד הנתונים.

כלי השירות make מבצע פקודות בקובץ make כדי לעדכן שם יעד אחד או יותר, איפה שֵׁם היא בדרך כלל תוכנית. אם לא  האפשרות קיימת, חפש את ה-makefiles GNUmakefile, makefile, ו Makefile, בסדר הזה.

בדרך כלל אתה צריך לקרוא ל-makefile makefile אוֹ Makefile. (מומלץ להשתמש ב-Makefile מכיוון שהוא מופיע בצורה בולטת ליד תחילת רישום ספרייה, ליד קבצים חשובים אחרים כגון README.) השם הראשון שנבדק, GNUmakefile, אינו מומלץ לרוב makefiles. השתמש רק בשם זה אם קובץ make הוא ספציפי לייצור GNU ולא יובן על ידי גרסאות אחרות של make. אם makefile הוא -, הקלט הסטנדרטי נקרא.

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

אפשרויות עבור כלי השירות Make

ה ו -M מתעלמים מהאפשרויות בגלל תאימות עם גרסאות אחרות של make.

-C dir משתנה ל מדריך מדריך לפני קריאת ה-makefiles או ביצוע כל דבר אחר. אם מרובים -C האפשרויות מצוינות, כל אחת מתפרשת ביחס לקודמתה: -C -C וכו' שווה ל -C /etc. זה משמש בדרך כלל עם קריאות רקורסיביות של make.

ה option מדפיס מידע על ניפוי באגים בנוסף לעיבוד רגיל. מידע איתור הבאגים אומר אילו קבצים נשקולים לביצוע מחדש, אילו זמני קבצים מושווים ועם אילו תוצאות, אילו קבצים צריך לעשות מחדש, ואילו כללים מרומזים נחשבים ואילו מיושם.

ה option נותן למשתנים שנלקחו מהסביבה עדיפות על משתנים מ-makefiles.

ה -ו קוֹבֶץשימושים באופציות קוֹבֶץ בתור makefile.

ה -אני האפשרות מתעלמת מכל השגיאות בפקודות המבוצעות כדי ליצור מחדש קבצים.

ה -אני דיראפשרות מציינת ספרייה דיר כדי לחפש קבצי makefile הכלולים. אם כמה -אני האפשרויות משמשות לציון מספר ספריות, המדריכים מתבצעים לפי הסדר שצוין. שלא כמו הטיעונים לדגלים אחרים של לעשות, מדריכים עם -אני דגלים עשויים לבוא ישירות אחרי הדגל: -אידיר מותר, וכן -אני מנהל. תחביר זה מותר עבור תאימות עם מעבד הקדם C -אני דֶגֶל.

ה -j משרות אפשרות מציינת את מספר משרות (פקודות) לרוץ בו זמנית. אם יש יותר מאחד  אפשרות, האחרונה יעילה. אם ה  האפשרות ניתנת ללא טיעון, make אינו מגביל את מספר העבודות הפועלות בו זמנית.

ה האפשרות ממשיכה ככל האפשר לאחר שגיאה. לא ניתן ליצור מחדש את המטרה שנכשלה, ואלו התלויים בה. עם זאת, ניתן לעבד את שאר התלות של יעדים אלה.

ה ו -אני טוען האפשרויות מציינות שאין להפעיל עבודות חדשות (פקודות) אם יש עבודות אחרות פועלות, וממוצע העומס הוא לפחות לִטעוֹן (מספר נקודה צפה). ללא טיעון, הוא מסיר מגבלת עומס קודמת.

ה option מדפיס את הפקודות שיבוצעו, אך לא מבצע אותן.

ה -o קוֹבֶץהאפשרות לא עושה מחדש את ה קוֹבֶץ גם אם הוא ישן יותר מהתלות שלו ואינו מחדש דבר בגלל שינויים בקוֹבֶץ. בעיקרו של דבר, מתייחסים לקובץ כאל ישן ומתעלמים מהכללים שלו.

ה -עמ' option מדפיס את מסד הנתונים (כללים וערכי משתנים) הנובע מקריאת ה-makefiles. לאחר מכן הוא פועל כרגיל או כפי שצוין אחרת. זה גם מדפיס את מידע הגרסה שניתן על ידי -v מתג (ראה להלן). כדי להדפיס את מסד הנתונים מבלי לנסות ליצור מחדש קבצים, השתמש עשה-עמ'-f/dev/null.

ה אפשרות מגדירה מצב שאלה. זה לא מריץ שום פקודה או מדפיס שום דבר. הוא מחזיר סטטוס יציאה שהוא אפס אם היעדים שצוינו מעודכנים, אחרת לא אפס.

ה האפשרות מבטלת את השימוש בכללים המובנים. זה גם מנקה את רשימת ברירת המחדל של סיומות לכללי סיומת.

ה אפשרות משתיקה את הפעולה. זה לא מדפיס את הפקודות בזמן שהן מבוצעות.

ה אפשרות מבטלת את ההשפעה של  אוֹפְּצִיָה. זה לא הכרחי אלא ב-makewhere רקורסיבי  עשוי לעבור בירושה מהיצרן ברמה העליונה דרך MAKEFLAGS או אם תגדיר  ב-MAKEFLAGS בסביבה שלך.

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

ה -v אפשרות מדפיסה את הגרסה של תוכנית make בתוספת זכויות יוצרים, רשימת מחברים והודעה שאין אחריות.

ה -וו אפשרות מדפיסה הודעה המכילה את ספריית העבודה לפני ואחרי עיבוד אחר. זה עשוי להיות שימושי למציאת שגיאות מקנים מסובכים של פקודות רקורסיביות.

ה -W קוֹבֶץ אפשרות מעמידה פנים שהמטרהקוֹבֶץשונה. בשימוש עם ה  flag, זה מראה לך מה יקרה אם היית משנה את הקובץ הזה. לְלֹא , זה כמעט כמו הפעלת a לגעת הפקודה על הקובץ הנתון לפני הפעלת make, אלא שזמן השינוי משתנה רק בדמיונו של make.