logo

לינוקס לעשות פקודה

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

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

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

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

הפקודה make לוקחת מטרות כארגומנטים. ארגומנטים אלה מפורטים ב'Makefile'. ה-makefile מכיל את המטרות וכן פעולות הקשורות למטרות אלו.

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

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

מה זה Makefile?

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

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

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

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

אפשרויות

הפקודה make מאפשרת אפשרויות שונות כדי להפוך אותה לספציפית יותר. כמה אפשרויות חשובות הן כדלקמן:

    -ב, -מ:אפשרויות אלו משמשות כדי להתעלם מהתאימות לגרסאות השונות של פקודת make.-ב, --תמיד-לעשות:האפשרויות הללו משמשות ליצירת כל היעדים ללא תנאי.-C dir, --directory=dir:אפשרויות אלו משמשות לשינוי הספרייה לפני הפעלת הקובץ make.-ד:הוא משמש להדפסת מידע איתור הבאגים.--debug[=FLAGS]:הוא משמש להדפסת מידע ניפוי באגים יחד עם עיבוד רגיל. אם נדלג על הדגל, הוא יציג תוצאות דומות לאפשרות '-d'.-ה, --סביבה-עוקפת:הוא משמש כדי לספק את המשתנים שנלקחו מהעדיפות של הסביבה ל-makefile.-f file, --file=file, --makefile=FILE:הוא משמש כדי להשתמש בקובץ בתור makefile.-i, --ignore-errors:האפשרות '-i' משמשת כדי להתעלם מכל השגיאות בפקודות.-I dir, --include-dir=dir:הוא משמש לציון ספרייה לחיפוש ה-makefile שצוין. אם נציין את אפשרויות ה'-I' הרבות, הוא יחפש בספריות הרבות לפי הסדר שצוין.-j [עבודות], --משרות[=משרות]:הוא משמש לציון מספר העבודות שיופעלו בו זמנית. אם נספק אפשרויות '-j' רבות, האחרונה תיחשב לביצוע. אם לא נציין את מספר המשרות, זה לא יגביל את המשרות שיכולות לפעול בו זמנית.-ק, --תמשיך:הוא משמש כדי להמשיך את התוכנית ככל האפשר לאחר קבלת שגיאה.-l [load], --load-average[=load]:הוא משמש כדי לציין שאין להתחיל משימה חדשה אם משימות אחרות נמצאות בתור וממוצע העומס הוא במינימום שלו.-n, --just-print, --dry-run, --recon:הוא משמש להצגת הפקודה שתופעל.-o file, --old-file=file, --assume-old=file:הוא משמש כדי להבטיח שה-make לא ייצור מחדש את הקובץ גם אם הוא ישן יותר מהתלות שלו.-O[type], --output-sync[=type]:הוא משמש כדי לאשר שהפלט של כל משימה מורכב ולא פלט מעורב של משימות אחרות. זה שימושי לעיבוד משימות מרובות עם האפשרות '-j'.-p, --print-data-base:הוא משמש להדפסת מסד הנתונים שמייצר לאחר קריאת ה-makefiles. זה גם שימושי להדפיס את מידע הגרסה כאשר נעשה שימוש עם האפשרות '-v'. כדי להדפיס את מסד הנתונים מבלי לנסות ליצור מחדש קבצים כלשהם, בצע את הפקודה כדלקמן:
    make -p -f/dev/null.-q, --שאלה:האפשרות '-q' משמשת עבור מצב שאלות. זה לא יריץ שום פקודה או ידפיס שום דבר. זה יחזיר מצב יציאה הוא אפס רק אם היעד שצוין כבר מסונכרן; אחרת, הוא יציג מצב יציאה שאינו אפס.-r, --אין כללים מובנים:הוא משמש כדי לבטל את השימוש בכללים המובנים.-R, --ללא-משתנים מובנים:זה שימושי אם אנחנו לא רוצים להגדיר שום משתנה מובנה.-s, --שקט, --שקט:אפשרויות אלה נקראות פעולה שקטה. זה מגביל להדפיס את הפקודות תוך כדי ביצוען.-S, --לא-להמשיך, --עצור:הוא משמש לביטול ההשפעה של פעולת '-k, --keep-going'.-t, --touch:הוא משמש לגעת בקבצים במקום להפעיל את הפקודות שלהם.--זֵכֶר:הוא משמש למעקב אחר הנטייה של כל מטרה.-v, --גרסה:הוא משמש להדפסת הגרסה המותקנת של כלי השירות make. יתר על כן, הוא מציג רשימה של מחברים, זכויות יוצרים והודעות מסוימות לגבי כלי השירות לעשות.-w, --print-directory:הוא משמש למעקב אחר הודעת הדפסה המכילה ספריית עבודה לפני ואחרי עיבוד אחר. זה שימושי לאתר שגיאות מהמבנה המסובך של פקודת make רקורסיבית.--no-print-directory:הוא משמש לכיבוי האפשרות '-w'.-W file, --what-if=file, --new-file=file, --assume-new=file:אפשרויות אלה מעמידות פנים שקובץ היעד השתנה זה עתה.--warn-undefined-variables:אפשרות זו משמשת כדי להזהיר שהפניה למשתנה לא מוגדר.

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

regex ב-java

שימוש בסיסי בפקודה make

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

צור ספרייה 'פרויקט' ושנה אליה את הספרייה. שקול את הפקודות הבאות:

 mkdir project cd project 

כעת צור א 'Makefile' בעל התוכן הבא עבור התוכנית הראשונה:

 say_hello: echo 'Hello World!' 

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

שקול את הפלט שלהלן:

לינוקס לעשות פקודה

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

 say_hello: @echo 'Hello World!' 

שקול את הפלט שלהלן:

מפת גיבוב
לינוקס לעשות פקודה

יעד עשוי להיות קובץ בינארי שתלוי בפעולות.

בואו נוסיף עוד כמה יעדים, כמו יצירה ורשום בקובץ ה-makefile. עדכן את ה-makefile באופן הבא:

 say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls 

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

לינוקס לעשות פקודה

אנו יכולים לשנות את יעד ברירת המחדל על ידי הכללת התוכן שלהלן בקובץ ה-makefile שלנו:

 .DEFAULT_GOAL := generate 

הוסף אותו לשורה הראשונה של הקובץ באופן הבא:

לינוקס לעשות פקודה

קובץ ה-makefile שלמעלה יחשב 'generate' כיעד ברירת המחדל. בצע את הפקודה make, והיא תיתן את הפלט באופן הבא:

לינוקס לעשות פקודה

אפשרות DeFAULT GOAL תפעיל רק יעד אחד כדי לציין יותר מיעד אחד כדי להשתמש בכל האפשרויות. כדי לציין יותר מיעד אחד, עדכן את השורה הראשונה של ה-makefile באופן הבא:

 all: say_hello generate 

זה יבצע את היעד שצוין. שקול את הפלט שלהלן:

לינוקס עושה פקודה

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

 .PHONY: all say_hello generate list say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls 

הקובץ לעיל יבצע את כל היעדים שצוינו. בצע את הפקודה make, שקול את הפלט שלהלן:

לינוקס לעשות פקודה

שימוש מתקדם בפקודה make

בואו ניצור פרויקט C++ עם קבצים main.cpp, function1.cpp, function2.cpp וקובץ תלות function.h.

הקוד של הקבצים הוא כדלקמן:

למצוא את האייפון שלי מאנדרואיד

main.cpp:

 #include #include 'functions.h' int main() { print_hello(); std::cout<< std::endl; std::cout<< 'The factorial of 5 is' << factorial(5) << std:: endl; return 0; } 

function1.cpp:

 #include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; } 

function2.cpp:

 #include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; } 

functions.h:

 void print_hello(); int factorial (int n); 

כעת צור קובץ הפעלה של הפרויקט לעיל על ידי ביצוע הפקודה שלהלן:

 g++ main.cpp function1.cpp function2.cpp -o hello 

הפקודה לעיל תיצור קובץ הפעלה 'שלום' מהקבצים main.cpp, function1.cpp ו-function2.cpp.

שקול את הפלט שלהלן:

לינוקס עושה פקודה

מהפלט לעיל, אם הוא מבוצע בהצלחה, הוא לא ייתן שום פלט.

בואו נבצע את אותה משימה באמצעות הקובץ makefile.

צור קובץ בשם Makefile ושם בו את הקוד שלהלן.

 all: g++ main.cpp function1.cpp function2.cpp -o hello 

מילת המפתח all משמשת עבור target ובשורה חדשה שים את אותה פקודה עם TAB כמו לעיל כדי לציין את הפעולה. שמור את הקובץ. שקול את הקובץ הבא:

לינוקס לעשות פקודה

כדי לפעול, בצע את הפקודה באופן הבא:

גרעין מיקרוליטי
 make 

הפקודה לעיל תיצור קובץ הפעלה 'שלום' של הקבצים שצוינו. שקול את הפלט שלהלן:

לינוקס לעשות פקודה

בואו נוסיף עוד כמה משימות ל-Makefile. הוסף משימה 'לְלַקֵט' כדלהלן:

 all: compile: g++ main.cpp function1.cpp function2.cpp -o hello 

כדי לבצע את המשימה לְלַקֵט, בצע את הפקודה הבאה:

 make compile 

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

לינוקס לעשות פקודה

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

עדכן את ה-Makefile באופן הבא:

 all: hello hello: main.o function1.o function2.o g++ main.o function1.o function2.o -o hello main.o: main.cpp g++ -c main.cpp function1.o: function1.cpp g++ -c function1.cpp function2.o: function2.cpp g++ -c function2.cpp clean: rm -rf *o hello 

מה-makefile לעיל, יצרנו שלושה אובייקטים כמו main.o, function1.o ו-function2.o. בנוסף, סיפקנו את התלות עבור היעדים main.o, function1.o ו-function2.o בתור main.cpp, function1.cpp ו-function2.cpp בהתאמה. כל המטרות יבצעו את המשימות שצוינו בתוכו. ציינו גם יעד נקי לניקוי כל התלות ולהסיר את קובץ ההפעלה.

כעת בצע את הפקודה make all כדי להפעיל את ה-makefile החדש שלנו.

 make all 

שקול את הפלט שלהלן:

לינוקס לעשות פקודה

מהפלט לעיל, אנו יכולים לראות שהפקודה ביצעה לראשונה את ה-main.o, function1.o ו-function2.o בהתאמה. זה יצור את קובץ ההפעלה והאובייקטים של הקבצים הנתונים. זה לא יבצע את היעד הנקי כי לא ציינו אותו בשלום. שקול את הקבצים הבאים:

לינוקס לעשות פקודה

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

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

 make clean 

שקול את הפלט שלהלן:

לינוקס לעשות פקודה

הפקודה לעיל תסיר את כל האובייקטים וקבצי ההפעלה. ראה את הצילום למטה של ​​הספרייה:

לינוקס לעשות פקודה

מהתמונה לעיל, אנו יכולים לראות שניקינו את הספרייה שלנו.

משתנים בפקודה make

אנחנו יכולים להגדיר את המשתנים ב-makefile שלנו. כדי להגדיר את המשתנים, השתמש ב- '=' מַפעִיל. לדוגמה, אם ברצוננו ליצור משתנה A ולהקצות לו פקודה gcc, הקצה אותו כ:

תכנות stdin c
 A=g++ 

השתמש בו באופן הבא ב-makefile שלנו:

 hello: hello.cpp ${A} hello.cpp -o hello 

זה מועבר למסוף כ:

 g++ hello.cpp -o hello 

אנחנו יכולים להשתמש ב-$(A) במקום ב-${A}, מכיוון ששניהם מטופלים זהה על ידי הסקריפט.

הערות ב-makefile

כדי להוסיף הערה לקובץ ה-make, השתמש ב- '#' סֵמֶל. לדוגמה, כדי להוסיף הערה בקטע הקומפילציה, הוסף אותה בשם '# זה יקמפל את התוכנית .' המהדר מתעלם מהערות.