ABA


"makefile / ant: מה ז''א תלות?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10281 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10281
Zvikadori
חבר מתאריך 3.8.02
5369 הודעות
   13:34   28.02.11   
אל הפורום  
  makefile / ant: מה ז''א תלות?  
 
   נניח אנחנו רוצים לכתוב איזשהו makefile(או ant).

ותמיד מדברים שם על תלות בקימפול, איך אני מחליט מה תלוי ומה לא?
תמיד(במייקפייל) הקובץ שלנו נחשב תלות כפי שראיתי, אך איך יודעים בקשר לקובץ אחר?
לדוג':
main.o : main.c defs.h
cc -c main.c

אז defs.h הוא גם תלות(חוץ מ-main.c שזה ברור).

ז"א, מה מכיל main.c שהיה צריך את defs.h כתלות?

אגב, כשהייתי צריך ליצור ant באיזושהי עבודה(כמובן שלא הסבירו לנו כיצד), עשינו איזשהי קומבינה ערבית, אבל התוכנית עבדה בסוף - הפצנו את הקובץ לכולם, והסברנו כיצד לשנות אותו ולהתאים לתכנית שלהם.
עכשיו כשיש לי זמן, אני באמת רוצה לדעת איך זה עובד.

תודה לכולם.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אממ מהניסיון הקצר שלי עם זה VeNom  28.02.11 13:55 1
  כשיש לך, למשל, ערכים בקובץ ההאדר שה-C דורש ldan192  28.02.11 22:17 2
     פה נבעה הבעיה שלי! Zvikadori 01.03.11 01:09 4
     אבל זה לא בהכרח תלות.. VeNom  01.03.11 11:08 5
  תודה רבה!!!! Zvikadori 01.03.11 01:09 3

       
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   13:55   28.02.11   
אל הפורום  
  1. אממ מהניסיון הקצר שלי עם זה  
בתגובה להודעה מספר 0
 
   את כל זה אני כותב בהנחה ואתה עובד בסביבת 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

עכשיו במקום לכתוב כל פעם את השורה המעצבנת אתה יכול לכתוב:


make Malloc.o

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

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


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..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   22:17   28.02.11   
אל הפורום  
  2. כשיש לך, למשל, ערכים בקובץ ההאדר שה-C דורש  
בתגובה להודעה מספר 0
 
אז יש פה תלות.

תזהר מתלויות מעגליות.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zvikadori
חבר מתאריך 3.8.02
5369 הודעות
   01:09   01.03.11   
אל הפורום  
  4. פה נבעה הבעיה שלי!  
בתגובה להודעה מספר 2
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   11:08   01.03.11   
אל הפורום  
  5. אבל זה לא בהכרח תלות..  
בתגובה להודעה מספר 2
 
   נניח שבקובץ main.c עשית include לקובץ header..אז הוא לא תלות..הקומפלייר מספיק חכם להבין שאם אתה צריך משהו מהקובץ ועשית לו include אז הוא נגיש ולא צריך לספק אותו כתלות..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zvikadori
חבר מתאריך 3.8.02
5369 הודעות
   01:09   01.03.11   
אל הפורום  
  3. תודה רבה!!!!  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net