את כל זה אני כותב בהנחה ואתה עובד בסביבת UNIX..אין לי מושג לגבי איך זה עובד בסביבות אחרות(לדעתי זה די דומה בכל אופן)..
טוב אז שמע רק על קצה המזלג..בטוח שיש דרכים יותר קצרות לעשות את זה..אבל זו די מובנת..ואם יש טעויות אני אשמח לקבל תיקון כי גם אותנו לא ממש לימדו איך לעשות את זה..נניח וכתבת קובץ cpp מסוים של malloc..
יש לך ביד קובץ malloc.cpp..בשביל ליצור EXE להרצה אתה צריך להמיר את הקוד הכתוב ב CPP לקוד מכונה(קומפיילר)..שהוא מייצר לך סוג של קובץ obj..שאחרי זה תעשה לו linking ותייצור EXE.
ולכן הפקודה של הקומפילציה היא(לדוגמא בעזרת קומפיילר של G++):
g++ -g -c Malloc.cpp -o Malloc.o
|
עכשיו במקום כל פעם שתשנה משהו תצטרך לקמפל קובץ קובץ יצרו את הקטע של התלויות..
בתור התחלה אתה יוצר כאן קובץ obj ע"י קומפילציה..ולכן נוח יותר לתת לו את התלות:
Malloc.o : Malloc.cpp g++ -g -c Malloc.cpp -o Malloc.o
|
עכשיו במקום לכתוב כל פעם את השורה המעצבנת אתה יכול לכתוב:
בהנחה כמובן שקראת לקובץ שאתה עובד עליו Makefile והוא היחיד בתיקיה..אחרת תצטרך לתת לפקודה make גם רפרנס לקובץ עצמו..
וזה יתבצע לך..
עכשיו למה זה טוב ליצור תלות כזו?
כי נניח ויש לך פרוייקט עם מלא מלא קבצים..כל עדכון של קובץ תצטרך לקמפל אחד אחד?
בגלל זה אתה יוצר תלות של All..וברגע שאתה מקיש
אז כל מה שהתעדכן מתקמפל אוטומטית ונוצרים לך קבצים שמוכנים להרצה..
עכשיו יצרנו קובץ obj ל Malloc שכתבנו..
נניח שהפרוייקט שלנו מורכב גם מ server ומ client שכתבנו בנפרד..וגם מ MUTEX שכתבנו..ובשרת יש גם מחסנית שמנהלת קריאות של הקליינטים..
אני אצרף לך דוגמא של MAKEFILE של איזה תרגיל שקיבלתי לעשות בעבר..
all : ex1_client ex1_server ex1_client : ex1_client.o Malloc.o
g++ ex1_client.o -o ex1_client ex1_client.o : ex1_client.cpp g++ -g -c ex1_client.cpp -o ex1_client.o ex1_server : ex1_server.o Mutex.o Stack.o Malloc.o g++ ex1_server.o Mutex.o Stack.o Malloc.o -ltbb -lpthread -o ex1_server ex1_server.o : ex1_server.cpp g++ -g -c ex1_server.cpp -o ex1_server.o Stack.o : Stack.cpp g++ -g -c Stack.cpp -o Stack.o Malloc.o : Malloc.cpp g++ -g -c Malloc.cpp -o Malloc.o Mutex.o : Mutex.cpp g++ -g -c Mutex.cpp -o Mutex.o clean : rm -rf *o ex1_server rm -rf *o ex1_client
|
הסבר קצר..התגית clean נועדה למחיקה מהירה של קבצים שנוצרים תחת התלויות.
כל התלויות שמסתיימות ב o הם עושים תהליך קומפילציה של קובץ cpp באמצעות הקומפיילר של ה g++..
התלויות ex1_server ex1_client בעצם עושות תהליך של linking בין הקבצים שעברו קומפילציה..(בתהליך הלינקים מוסיפים כל מיני דגלים..נגיד יש סוג של דגל שאומר לו שיתמוך ב THREADS)..ובסוף נוצרים קבצי EXE שאתה יכול להריץ ב BASH..