שתי שאלות

DecayCell

New member
שתי שאלות

ראשית, אני מנסה ללא הצלחה מרובה להשתמש ב-make של GNU בשביל לכתוב makefile לפרוייקט זעיר, אבל הוא מסרב בתקיפות לפרש את הקובץ כמו שהמדריך מציג זאת (הוא צועק עלי שלא ניסחתי כללים ליצירת קבצי h...). מישהו מכיר את הכלי הנ"ל מקרוב, או מכיר טוטוריאל טוב עבורו? עם כל הכבוד למדריכים של GNU, אין לי חודש לשבת ולקרוא נובלה באורך 1000 עמודים...
שנית, במסגרת הפרוייקט (לבית-הספר, אגב) אני רוצה להשתמש בממשק Win32API. מאחר ואחת מהדרישות היא להציג רשימות של מידע באופן קריא וברור, חשבתי שזה היה מאוד פשוט לתרגם בתוכנה את הנתונים שלי למחרוזת HTML - זאת במידה וישנו בקר סטנדרטי כלשהו שיוכל להציג את הקובץ שאצור בתוך החלון של התוכנה. מישהו יכול לתת לי טיפ לגבי איך אפשר ליישם את הרעיון הזה? תודה רבה מראש.
 

the new L

New member
בקשר לשאלה השנייה

אז אם אתה יכול להשתמש ב MFC, יש שם מחלקה שנקראת CHtmlView שאתה יכול להציג בעזרתה קבצי HTML בקלות
 

annefan

New member
תעלה את ה-makefile

היה לי פעם קישור למדריך טוב, אבל אני לא מוצא. לדעתי בתוך התיעוד של Make יש מדריך הדגמה קצר.
 

DecayCell

New member
הנה הקובץ

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

annefan

New member
אכן ספריות

1. אני לא יודע מה הסביבה שלך תחת windows. ב-cygwin התו המפריד בין ספריות הוא : ולא ; (בדיוק כמו בכל unix). 2. VPATH אומר ל-make איפה לחפש קבצים. הוא לא בהכרח אומר לקומפיילר איפה הקבצים נמצאים. בעץ דומה לשלך שהרמתי, make מצא את הקבצים אבל כיוון שאתה מעביר אותם לפי שם, gcc לא מוצא אותם. הקובץ הבא מצליח:
COMPILER = mingw32-gcc COMPILER = gcc VPATH = MeetingLib:TimeLib libs : MeetingLib.o TimeLib.o clean : del /s *.o MeetingLib.o : MeetingLib.c MeetingDefs.h TimeDefs.h TimeLib.h # $(COMPILER) -c MeetingLib.c TimeLib.o : TimeLib.c TimeDefs.h # $(COMPILER) -c TimeLib.c​
make מספיק חכם להבין קבצי o נוצרים מקבצי c\cpp\y\... באותו שם (זה מה שנקרא implicit rules). אם אתה רוצה לראות מה קורה מאחורי הקלעים תריץ:
make --debug​
או אם אתה באמת אמיץ:
make -d​
תקרא בקישור הזה (שאתמול מת, משום מה) על @$, ?$ ו->$.
 

DecayCell

New member
תודה רבה על התגובה

אכן צדקת, אחת הבעיות הייתה בעובדה שהשתמשתי ב-';' (למרות שהאשמה היא על הדוקומנטציה של גנו, שאמרה שבסביבת ווינדוס צריך להשתמש דווקא בו
). בדקתי היטב, והגעתי למסקנה שהבעיה שנותרה נעוצה בכך שעבור שורות התלויות השימוש ב-VPATH אכן פועל, אולם הוא לא מתרגם את השורה שמועברת לקומפיילר כמו שצריך, ולכן הקומפיילר עצמו לא מוצא את הקבצים. ניסיתי להוסיף לפני פעולת קומפילציה הוראת cd לעבור לספריה הדרושה, אבל גם כך הקומפיילר לא מוצא את הקובץ. בדקתי, ומסתבר שהקומפיילר ממשיך לעבוד מספריית השורש גם לאחר שאני משנה, כביכול, את ספריית העבודה.
 

annefan

New member
אהמ, קראת את מה שכתבתי עד הסוף?

תקרא שוב את סעיפים 2 ו-3. תיארתי את הבעיה (שגם אתה מצאת, וזה טוב) ואת אחד הפתרונות. לגבי שינוי הספריה שלא עובד, הבעיה היא שכל שורה מבוצעת ב-shell חדש. לכן, כשאתה עושה cd, נפתח shell (או cmd) הוא משנה ספריה ויוצא. בשורה הבאה, את מריץ את הקומפיילר ב-shell חדש, בספריה המקורית. הפתרון (אם אתה מעדיף לא לסמוך על make):
MeetingLib.o : MeetingLib.c MeetingDefs.h TimeDefs.h TimeLib.h @(cd MeetingLib; $(COMPILER) -c MeetingLib.c)​
שים לב שאין צורך לחזור ב-cd, כיוון שכאמור, ה-shell הזה יושמד בסוף השורה.
 

DecayCell

New member
תודה רבה

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

giladznaor

New member
makefile

אם אתה עובד תחת ווידוס/דוס (DJGPP), אז זה בטח בעיה שנתקלתי בה הרבה, וזה הצורה השונה שבה מסמנים סוף-שורה ביוניקס וווינדוס. makefile מצפה שהקובץ שלו (הקובץ שלו, לא התוכנית עצמה) תהיה בפורמט של ווינדוס, אחרת הוא צועק איזה משהו שלא קשור בכלל. אמורה להיות איזשהי תוכנית יחד עם DJGPP שעושה את ההמרה, אבל אני לא זוכר איך קוראים לה. אם זה קובץ קצר, אתה יכול לעשות copy con...
 

DecayCell

New member
רעיון ה-HTML נזנח

ככל הנראה זה עניין הרבה יותר מסובך ממה שאני יכול להתמודד איתו בשלב זה, מה גם שזו מטרה משנית לחלוטין... לפיכך, חשבתי להשתמש ב-RTF - אם אני לא טועה יש פקד כזה (לפחות ב-VB). חיפשתי ב-MSDN, אבל מצאתי פתרונות רק עבור VB ו-#C... מישהו יודע איך אפשר לשלב פקד כזה בתוכנית C בלי שימוש ב-MFC (אני מהדר עם GCC)? תודה מראש.
 
למעלה