הלינוקס עשה הפקודה משמשת לבנייה ולתחזוקה של קבוצות של תוכניות וקבצים מקוד המקור. בלינוקס, זוהי אחת הפקודות הנפוצות ביותר על ידי המפתחים. זה מסייע למפתחים להתקין ולהרכיב כלי עזר רבים מהמסוף. יתר על כן, הוא מטפל בתהליך הקומפילציה של הפרויקטים הגדולים. זה חוסך את זמן ההידור.
המניע העיקרי של פקודת make הוא לקבוע תוכנית גדולה לחלקים ולבדוק האם יש צורך להידור מחדש או לא. כמו כן, הוא מוציא את הפקודות הדרושות כדי להרכיב אותם מחדש.
בסעיף זה, נשתמש בתוכנות C++ מאחר ששפת התכנות C++ היא שפה מונחה עצמים, אך אתה יכול להשתמש בכל שפה המותקנת במחשב שלך. זה לא מוגבל רק לתוכניות; אנחנו יכולים להשתמש בו כדי לתאר גם משימות אחרות.
איך עובד פקודה לעשות?
הפקודה make לוקחת מטרות כארגומנטים. ארגומנטים אלה מפורטים ב'Makefile'. ה-makefile מכיל את המטרות וכן פעולות הקשורות למטרות אלו.
כאשר אנו מבצעים את הפקודה make, הוא מחפש את ה-makefile וסורק אותו כדי למצוא את היעד ולגשת לתלות שלו. אם לא צוינו תלות, הוא יחפש את התלות ויבנה אותה. הוא יבנה את היעד העיקרי לאחר בניית התלות.
לדוגמה, אם נרצה לשנות רק קובץ מקור אחד ונבצע את הפקודה make; לכן, זה יקמפל רק את קובץ האובייקט שמחובר לקובץ המקור הזה. זה יחסוך הרבה זמן בהידור הסופי של הפרויקט.
מה זה Makefile?
הפקודה make מפעילה את ה-makefile. זהו קובץ מיוחד המכיל את פקודות המעטפת שאנו יוצרים כדי לתחזק את הפרויקט. ה-makefile מכיל מטרות ופקודות לביצוע. אסור ליצור יותר מקובץ makefile אחד. מומלץ ליצור עבורו ספרייה נפרדת.
זה עוקב אחר הקבצים האחרונים, אז עדכן רק את הקבצים הנדרשים. אם יש לנו תוכנה גדולה עם קבצי מקור רבים, עלינו לבצע קומפילציה מחדש של כל הקבצים התלויים. לכן, זה עשוי להיות תהליך שלוקח זמן רב.
ל-makefile יש רשימה של תקנים. תקנים אלו מועילים למערכת כדי להבין איזו פקודה אנו רוצים לבצע. תקנים אלה מחולקים לשני חלקים ומופרדים על ידי קו חדש. השורה הראשונה היא קו התלות, והשורות הבאות נחשבות כ פעולות או פקודה ס. הפקודות מופרדות באמצעות לשונית בשורה החדשה.
ה תלות ציין את הקשר של כל קובץ עם קבצי המקור. וה יַעַד הוא קובץ הפעלה, והוא נוצר לאחר ביצוע הפקודה make.
אפשרויות
הפקודה make מאפשרת אפשרויות שונות כדי להפוך אותה לספציפית יותר. כמה אפשרויות חשובות הן כדלקמן:
make -p -f/dev/null.
בואו נבין כמה דוגמאות לפקודה 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, השתמש ב- '#' סֵמֶל. לדוגמה, כדי להוסיף הערה בקטע הקומפילציה, הוסף אותה בשם '# זה יקמפל את התוכנית .' המהדר מתעלם מהערות.