הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
אם מישהו יגיד לי כמה CMake נפלא וכמה autotools גרוע אני...
לאחרונה אני סבלתי מבעיות בניה מוזרות, פתאום אחרי עריכת כמה קבצים היו לי כשלונות בבניה. בהתחלה לא הבנתי מדוע זה קורה לי. חשבתי אולי משהו השתנה ב־svn והוא לא מעדכן נכון את ה־timestamp או אולי אני עשיתי איזושהי שטות.
היום סוף סוף הבנתי מה הבעיה ועוד פעם, כמה אני שונא CMake.
"למזלי", התקנתי שלשום CMake 2.8.1 מקוד מקור, כדי לדבג בעיה קומפיליצה ששברה את הבניה שלי (שעבדה יפה עם 2.6, אגב גם באג או ליתר דיוק שינוי מדיניות).
אז נתחיל בקצרה:
זה פלט של הפקודה בעבודה עם CMake 2.6
$ grep application.h CMakeFiles/cppcms.dir/depend.make
CMakeFiles/cppcms.dir/src/application.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/applications_pool.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/http_context.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/internal_file_server.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/rpc_json.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/service.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/url_dispatcher.cpp.o: /usr/include/cppcms/application.h
וזה פלט של אותה פקודה לגמרה בעבודה עם CMake 2.8
$ grep application.h CMakeFiles/cppcms.dir/depend.make
CMakeFiles/cppcms.dir/src/application.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/applications_pool.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/http_context.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/internal_file_server.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/rpc_json.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/service.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/url_dispatcher.cpp.o: ../cppcms/application.h
ההבדל ברור? אם לא, אני אסביר.
למרות שדגלוני הקומפיילר אומרים באופן מפורש להסתכל בתיקיה ".." "בודק התלויות" של CMake (במרכאות כפולות ומכופלות) מתעקש להסתכל על ספריות המערכת למרות שזה לא נכון בעליל.
האמת? אני לא מבין כיצד KDE אימצו כלי כזה? אני מבין שיש ל־CMake לא מעט יתרונות, רק שהבעיה שאני יותר נלחם בו מאשר נעזר בו. האם תמיכה ב־MSVC שווה את זה?
אגב, autotools משתמש בקומפיילר עצמו כדי לבנות תלויות כך שהתלויות יוצאות מדויקות לגמרי.
טוב, נו... מספיק להתבכיין, נראה לי אצטרך לשדרג את ה־CMake שלי לגרסה האחרונה.
נ.ב.: ik_5, אפילו אל תגיב... אני יודע מראש מה אתה תרצה לומר
תגובות
אוף, אני באמת לא מבין כמה קשה זה לבנות build system. אני עורך ניסוי מתמשך כמה חודשים, אני משחק עם clang, ואני מנסה לבנות איתו את Qt4. מצאתי באג עצבני ב-Build system (אם אתה רוצה לדעת, זה qmake).
המצב שלי הוא שאני בונה את הקוד out of source, ומשום מה, יש לי taget אחד שהוא צריך קובץ
$build_dir/something
, אבל בפועל אני רואה$src_dir/something
. מאוד מוזר. מה שיותר מוזר, זה שאני רואה שה-Makefile פשוט מכיל את ה-include שלא נכון, ומה שיותר מפתיע זה שאם אני בונה עם make CXX=gcc הקובץ מקפמפל.בהחלט רגע WTF ענק. לא מובן.
תסתכל בפלט של הפקודה. מה שיכול להיות שמערכת הבניה מניחה שהפלט יימצא בספריה הנוכחית ועבור clang זה שונה בהשוואה ל־gcc.
חוץ מזה... גם אני לא מבין מדוע זה כל־כך קשה?
הוסף תגובה:
חובה לאפשר JavaScript כדי להגיב.