שְׁאֵלָה:
אזהרה על רשימות CMake של Arduino "המדיניות CMP0022 אינה מוגדרת: INTERFACE_LINK_LIBRARIES"
fenix688
2014-03-25 17:24:10 UTC
view on stackexchange narkive permalink

אני מנסה לבנות דוגמה לארדואינו מבלי להשתמש ב- IDE שלה. מערכת ההפעלה שלי היא Windows 8.1 ואני משתמש בגרסה האחרונה של CMake (2.8.12.2) ו- MinGW (GNU Make 3.82.90) .

הורדתי את ה- Arakeino CMakeLists ולמדתי הכל על ליצור / להעלות כל קושחה בארדואינו שלי. אני משתמש ב Arduino UNO .

ואז, אם אני משנה את רשימות CMakeLists שנשמרו ב ~ / arduino-cmake-master / example / CMakeLists.txt ( arduino-cmake-master הוא תיקיית המאגר) כדי לבנות גם את הדוגמה ל- WiFi WiFiWebClient גם:

  ... # הוסף את דוגמת ה- WiFi -> WiFiWebClientgenerate_arduino_example (wifi_example LIBRARY WiFi EXEMPLE WiFiWebClient) ...  

ולבצע:

  $ cmake -G "MinGW Makefiles" ... CMake אזהרה (dev) בדוגמה / CMakeLists.txt: המדיניות CMP0022 לא מוגדרת: INTERFACE_LINK_LIBRARIES מגדיר את ממשק הקישור. הפעל את "cmake --help-policy CMP0022" לפרטי מדיניות. השתמש בפקודה cmake_policy כדי להגדיר את המדיניות ולדכא אזהרה זו. היעד "uno_example" כולל נכס INTERFACE_LINK_LIBRARIES. יש להעדיף זאת כמקור ממשק הקישור לספריה זו, אך מכיוון שה- CMP0022 אינו מוגדר CMake מתעלם מהמאפיין ומשתמש ביישום הקישור כממשק הקישור במקום זאת. INTERFACE_LINK_LIBRARIES: uno_CORE; uno_example; uno_Wire יישום קישור: uno_CORE; uno_Wire אזהרה זו מיועדת למפתחי פרויקטים. השתמש ב- -Wno-dev כדי לדכא את זה. CMake אזהרה (dev) בדוגמה / CMakeLists.txt: המדיניות CMP0022 לא מוגדרת: INTERFACE_LINK_LIBRARIES מגדיר את ממשק הקישור. הפעל את "cmake --help-policy CMP0022" לפרטי מדיניות. השתמש בפקודה cmake_policy כדי להגדיר את המדיניות ולדכא אזהרה זו. יעד "uno_Wire" כולל נכס INTERFACE_LINK_LIBRARIES. זה צריך להיות
מועדף כמקור ממשק הקישור לספריה זו, אך מכיוון שה- CMP0022 אינו מוגדר CMake מתעלם מהמאפיין ומשתמש במקום זאת ביישום הקישור כממשק הקישור. INTERFACE_LINK_LIBRARIES: uno_CORE; uno_Wire קישור קישור: uno_CORET אזהרה זו מיועדת למפתחי פרויקטים. השתמש ב- -Wno-dev כדי לדכא את זה. CMake אזהרה (dev) בדוגמה / CMakeLists.txt: המדיניות CMP0022 לא מוגדרת: INTERFACE_LINK_LIBRARIES מגדיר את ממשק הקישור. הפעל את "cmake --help-policy CMP0022" לפרטי מדיניות. השתמש בפקודה cmake_policy כדי להגדיר את המדיניות ולדכא אזהרה זו. יעד "uno_SPI" כולל נכס INTERFACE_LINK_LIBRARIES. יש להעדיף זאת כמקור ממשק הקישור לספריה זו, אך מכיוון שה- CMP0022 אינו מוגדר CMake מתעלם מהמאפיין ומשתמש ביישום הקישור כממשק הקישור במקום זאת. INTERFACE_LINK_LIBRARIES: uno_CORE; uno_SPI יישום קישור: uno_CORET אזהרה זו מיועדת למפתחי פרויקטים. השתמש ב- -Wno-dev כדי לדכא את זה. CMake אזהרה (dev) בדוגמה / CMakeLists.txt: המדיניות CMP0022 לא מוגדרת: INTERFACE_LINK_LIBRARIES מגדיר את ממשק הקישור. הפעל את "cmake --help-policy CMP0022" לפרטי מדיניות. השתמש בפקודה cmake_policy כדי להגדיר את המדיניות ולדכא אזהרה זו. יעד "uno_WiFi" כולל נכס INTERFACE_LINK_LIBRARIES. יש להעדיף זאת כמקור ממשק הקישור לספריה זו, אך מכיוון שה- CMP0022 אינו מוגדר CMake מתעלם מהמאפיין ומשתמש ביישום הקישור כממשק הקישור במקום זאת. INTERFACE_LINK_LIBRARIES: uno_CORE; uno_WiFi קישור יישום: uno_CORET אזהרה זו מיועדת למפתחי פרויקטים. השתמש ב- Wno-dev כדי לדכא את זה. - יצירת הבד - קבצי בנייה נכתבו אל: ~ / arduino-cmake-master  

מאוחר יותר אני מבצע:

> $ mingw32-make ... קישור ספרייה סטטית CXX libuno_WiFi.a [89%] יעד בנוי uno_WiFi תלות סריקה של wifi_example היעד [92%] בניית דוגמא של אובייקט CXX / CMakeFiles / wifi_example.dir / wifi_example_WiFiWebClient.cpp.obj קישור הפעלה CXX wifi_example.elflibuno_WiFi.a (WiFiClient.cpp.obj): בפונקציה 'WiFiClient :: status ()': C: \ Program קבצים \ Arduino \ ספריות \ WiFi / WiFiClient.cpp: 160: התייחסות לא מוגדרת ל- 'ServerDrv :: getClientState (char un חתום)' libuno_WiFi.a (WiFiClient.cpp.obj): בפונקציה 'WiFiClient :: stop ()': C : \ Program Files \ Arduino \ ספריות \ WiFi / WiFiClient.cpp: 131: התייחסות לא מוגדרת ל- 'ServerDrv :: stopClient (char לא חתום)' libuno_WiFi.a (WiFiClient.cpp.obj): בפונקציה 'WiFiClient :: הצצה () ': C: \ Program Files \ Arduino \ ספריות \ WiFi / WiFiClient.cpp: 117: התייחסות לא מוגדרת ל-' ServerDrv :: getData (char לא חתום, char לא חתום *, char לא חתום) 'libuno_WiFi.a (WiFiClient.cpp.obj) : בפונקציה 'WiFiClient :: read ()': C: \ Program Files \ Arduino \ libraries \ WiFi / WiFiClient.cpp: 101: התייחסות לא מוגדרת ל 'ServerDrv :: getData (char לא חתום, char לא חתום *, char לא חתום)' libuno_WiFi.a (WiFiClient.cpp.obj): בפונקציה 'WiFiClient :: read (לא חתום *, לא חתום int)': C: \ Program Files \ Arduino \ libraries \ WiFi / WiFiClient.cpp: 107: התייחסות לא מוגדרת ל- `ServerDrv :: getDataBuf (char לא חתום, char לא חתום *, לא חתום int *) 'libuno_WiFi.a (WiFiClient.cpp.obj): בפונקציה' WiFiClient :: זמין () ': C: \ Program Files \ Arduino \ ספריות \ WiFi / WiFiClient.cpp: 90: התייחסות לא מוגדרת ל- `ServerDrv: : availData (char charged) 'libuno_WiFi.a (WiFiClient.cpp.obj): בפונקציה' WiFiClient :: כתוב (char const * לא חתום, int int חתום) ': C: \ Program Files \ Arduino \ libraries \ WiFi / WiFiClient. cpp: 73: התייחסות לא מוגדרת ל- `ServerDrv :: sendData (char לא חתום, const char לא חתום *, int חתום) 'C: \ Program Files \ Arduino \ ספריות \ WiFi / WiFiClient.cpp: 78: התייחסות לא מוגדרת ל-` ServerDrv :: checkDataSent (char charged) 'libuno_WiFi.a (WiFiClient.cpp.obj): בפונקציה' WiFiClient :: connect (IPAddress, int חתום) ': C: \ Program Files \ Arduino \ ספריות \ WiFi / WiFiClient.cpp: 36: התייחסות לא מוגדרת ל- `ServerDrv :: startClient (לא חתום ארוך, לא חתום, char לא חתום, char לא חתום) 'libuno_WiFi.a (WiFi.cpp.obj) : בפונקציה 'WiFiClass :: hostByName (char const *, IPAddress&)': C: \ Program Files \ Arduino \ ספריות \ WiFi / WiFi.cpp: 228: התייחסות לא מוגדרת ל- 'WiFiDrv :: getHostByName (char const *, IPAddress&) 'libuno_WiFi.a (WiFi.cpp.obj): בפונקציה' WiFiClass :: status () ': C: \ Program Files \ Arduino \ ספריות \ WiFi / WiFi.cpp: 223: התייחסות לא מוגדרת ל- `WiFiDrv :: getConnectionStatus ( ) 'libuno_WiFi.a (WiFi.cpp.obj): בפונקציה' WiFiClass :: RSSI () ': C: \ Program Files \ Arduino \ ספריות \ WiFi / WiFi.cpp: 181: התייחסות לא מוגדרת ל-' WiFiDrv :: getCurrentRSSI () 'libuno_WiFi.a (WiFi.cpp.obj): בפונקציה' WiFiClass :: SSID () ': C: \ Program Files \ Arduino \ ספריות \ WiFi / WiFi.cpp: 169: התייחסות לא מוגדרת ל-' WiFiDrv :: getCurrentSSID () 'libuno_WiFi.a (WiFi.cpp.obj): בפונקציה' WiFiClass :: localIP () ': C: \ Program Files \ Arduino \ libr טלה \ WiFi / WiFi.cpp: 149: התייחסות לא מוגדרת ל- 'WiFiDrv :: getIpAddress (IPAddress&)' libuno_WiFi.a (WiFi.cpp.obj): בפונקציה 'WiFiClass :: start (char *, char const *)': C: \ Program Files \ Arduino \ ספריות \ WiFi / WiFi.cpp: 87: התייחסות לא מוגדרת ל- 'WiFiDrv :: wifiSetPassphrase (char *, char לא חתום, char const *, char לא חתום)' C: \ Program Files \ Arduino \ ספריות \ WiFi / WiFi.cpp: 92: התייחסות לא מוגדרת ל- 'WiFiDrv :: getConnectionStatus ()' libuno_WiFi.a (WiFi.cpp.obj): בפונקציה 'WiFiClass :: init ()': C: \ Program Files \ Arduino \ ספריות \ WiFi / WiFi.cpp: 22: התייחסות לא מוגדרת ל- 'WiFiDrv :: wifiDriverInit ()' דוגמא \ CMakeFiles \ wifi_example.dir \ build.make: 95: מתכון למטרה 'דוגמה / wifi_example.elf' נכשלה w32-make [2 ]: *** [דוגמה / wifi_example.elf] שגיאה 1CMakeFiles \ Makefile2: 748: מתכון למטרה 'example / CMakeFiles / wifi_example.dir / all' failedmingw32-make [1]: *** [דוגמה / CMakeFiles / wifi_example. dir / all] שגיאה 2 Makefile: 74: מתכון למטרה 'הכל' נכשלה w32-make: *** [הכל] שגיאה 2

הבעיה היא ה- Arduino.cmake מכיוון שהוא לא מקשר כהלכה עם ה- WiFi של הספרייה, אבל הוא מקשר עם ספריית Wire.

מישהו יודע מדוע האזהרה הזו מופיעה ו מדוע Wire מקשר בסדר אבל WiFi לא?

תודה!

הערה : אני משתמש בקוד מקורי שנמצא בדוגמת המאגר, אני ' לא שינינו את זה.

האם אתה יכול לאשר שאתה יכול ליצור את הדוגמאות לפני שינוי 'CMakeLists.txt'? כמו כן, האם שינית משהו אחר בקובץ זה?
נראה כי האזהרה שניתנה על ידי cmake אינה מהווה בעיה (קיבלתי את אותה אזהרה עבור אחד מהפרויקטים לדוגמה שלי והיא עובדת בסדר לאחר מכן). האם ניסית להשתמש בגנרטור אחר (אני משתמש ב- "Unix Makefiles" וזה עובד מצוין עבור הפרויקט שלי; הייתי צריך להתקין רק גרסת Windows של 'make').
נקודה נוספת: האם ניסית תחילה את 'generer_arduino_library (WiFi ...)', והגדרת את כל הכותרות וקבצי המקור הכלולים בספריית WiFi? ואכן, אני לא חושב ש- cmake יוכל לבנות את הספרייה כהלכה מכיוון שהיא לא אמורה להיות מסוגלת למצוא קבצים בספריית המשנה 'כלי שירות': אלה הקבצים המכילים הגדרות ש- 'mingw32-make' מתלונן עליהן.
קשור לתגובה הקודמת שלי, אפשרות מהירה יותר שתוכל לנסות היא `set (WiFi_RECURSE True)`; הוא אומר ל- cmake לאסוף את כל הקבצים, כולל אלה בספריות המשנה של ספריית ה- WiFi.
אחד תשובה:
jfpoilpret
2014-03-26 11:31:05 UTC
view on stackexchange narkive permalink

למעשה יש לשאלה שלך שני חלקים נפרדים:

  1. מדוע ארדואינו-cmake מייצר את האזהרה "המדיניות CMP0022 לא מוגדרת: INTERFACE_LINK_LIBRARIES ..."?
  2. מדוע האם גורם , באמצעות MakeFile שנוצר, נכשל בעת בניית דוגמה ל- WiFi?

ראשית , ה- arduino-cmake " מדיניות CMP0022 היא רק אזהרה ולא שגיאה. בהתאם ל מאמר זה של cmake, מדיניות CMP זו הוצגה רק לאחרונה ב CMake 2.8.12 .

אתה מקבל את האזהרה הזו פשוט מכיוון ש- arduino-cmake נוצר על בסיס גרסה ישנה יותר של cmake ולכן אינו תומך במדיניות חדשה זו.

על מנת להיפטר מהאזהרה הזו, בתיעוד מוזכר עליך להוסיף את cmake_policy (SET CMP0022 פקודה OLD) לתצורת ה- cmake שלך.

לצערי ניסיתי את זה בדוגמה CMakeLists.txt ללא הועיל; אולי צריך להגדיר את זה ישירות בקבצי arduino-cmake (שלא בדקתי).

לכן, אם אתה רוצה להיפטר מהאזהרה המשעממת הזו, נראה שהפתרון היחיד שנשאר לך הוא כדי להשבית את כל האזהרות בעת הפעלת cmake:

cmake -G "MinGW Makefiles" -Wno-dev

זה עובד בסדר והסיר את כל האזהרות ..

הבעיה השנייה שלך (האמיתית שהייתי אומר) נובעת ממבנה ספריית ה- WiFi: enter image description here

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

כיצד לפתור את זה? רק אמור ל arduino-cmake לעשות חיפוש רקורסיבי לספריית ה- WiFi ; ב- CMakeLists.txt שלך, הקפד להוסיף את השורה הבאה:

  set (WiFi_RECURSE True) create_arduino_example (wifi_example LIBRARY WiFi EXEMPLE WiFiWebClient)  

השורה הוסיפה (WiFi_RECURSE True) רק אומרת ל- arduino-cmake כי עבור ספריית WiFi, היא צריכה לחזור דרך ספריות המשנה כאשר מחפשים קוד מקור.

בדקתי זה עם "Unix Makefiles" (לא "MinGW Makefiles" אבל אני מניח שזה לא ישפיע) וזה עבד בסדר.



שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...