makefile

makefile

נתונה לי הבעיה הבאה
אני אמור לכתוב קומפיילר ואני נתקע רק עם ה- makefie
אשמח לעזרה
הבעיה היא כדלקמן
הפונקציה של הקומפיילר שלי מקבלת שני פרמטרים
פרמטר ראשון שם הקובץ שצריך להמיר אותו לקובץ C
והפרמטר השני קובץ הפלט (כלומר לאיזה קובץ אני להוציא את הפלט שלי )

עכשיו אם אני יודע את שמות הקבצים שיש לי קבצי ה-C מלכחילה אני יודע לבנות makefile
וזו לא הבעיה

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


הערה סביבת עבודה של לינוקס מנסה לקמפל בעזרת ה- gcc

בתודה מראש :)
 

BravoMan

Active member
השאלה שלך לא ברורה:

מהפסקה הראשונה אני מבין ש:
אתה אמור לכתוב יישום ששמתרגם הוראות בשפה מסוימת לשפת C?
התוכנה הזו מקבלת 2 פרמטרים בשורת פקודה: קובץ הקלט וקובץ הפלט.

היכן בדיוק נכנסים לתמונה קובץ make ו-gcc?
אתה כותב את ה-"קומפיילר" שלך ב-C או ++C?
אתה צריך קובץ make בשביל לקמפל אותו?

או שאתה רוצה ליצור קובץ make שיקרא לקומפיילר שלך?
 
תודה על התגובה

אני אחדד את השאלה :
יש לי פונקציה שמקבלת שני ארגומנטים
היא לוקחת קובץ ואז ממירה אותו ע"י רצף של פקודות לשפת C

נקרא לקובץ הזה קובץ הפלט

הבעיה שלי שלקומפיילר שלי אני אמור לספק makefile
אשר יקמפל את הקבצים שהוצאתי
לקבצי הרצה
לדוגמה אם הריצו את הקומפיילר שבניתי בשתי הרצות כך שבפעם הראשונה יצא לי קובץ בשם a.c
ובפעם השניה b.c

אני צריך שהmakefile שלי יידע שהוא צריך להוציא שני קבצי ריצה שונים a ו b
בהתאמה
מכיוון ששמות הקבצים לא יודעים לי בזמן בניית ה- makefile
אלא רק אחרי שהריצו את הקומפיילר אני לא ממש מצליח להבין איך לעשות את זה
 

BravoMan

Active member
טוב, זה קצת טריקי, אבל מערכת ה-Make היא מערכת

בנייה מאוד חזקה.


SRCS = $(wildcard *.c)
ELFS = $(patsubst %.c,%,$(SRCS))

all: $(ELFS)


שלושת השורות הללו יגרמו ל-Make לעבור על כל קובץ C בספרייה הנתונה וליצור ממנו קובץ ריצה באותו שם (ללא הסיומת כמובן).

בעדיבות stackoverflow
 
למעלה