הנדסה אזרחית & הנדסה מבנית
יצירת לוח-צלב בניית מערכת לפרויקטים C שימוש ב-Civ
Table of Contents
בניית יישומי C אשר מציפים ומנוהלים באופן אמין על פני Windows, macOS ולינוקס דורש יותר קוד מקור נייד - זה דורש מערכת בנייה שמתאימה לכל כלי Native של פלטפורמה. CMake, גנרטור מערכת קוד פתוח, פותר את זה על ידי כך על ידי מתן הגדרה פשוטה של הפרויקט שלך פעם בקובץ תצורה פשוטה ולאחר מכן לייצר קבצי בניית פלטפורמה ספציפית (Makefiles, Visual Studio, קבצי Xcode, וכו ', מספק טכניקות מתקדמות לניהול Cform, כדי ליצור תצורה, כדי ליצור תצורה פשוטה, כדי ליצור תצורה של מערכת ניהול Cform, וכו '.com תצורה, כדי ליצור תצורה פשוטה תצורה של ניהול Cform, יצירת תצורה של ניהול Cform תצורה, יצירת תצורה של ניהול Cform תצורה, יצירת קבצים ניהול תצורה פשוטה תצורה, יצירת תצורה תצורה של ניהול תצורה, וכו '.
מה זה CMake?
CMake הוא מערכת meta-Build: הוא אינו מאגד קוד ישירות אלא יוצר קבצים קלט עבור מערכות בנייה אחרות.You מתאר את הפרויקט שלך ב-FLT:0 קבצים באמצעות שפה ספציפית דומיין. CMake לאחר מכן קורא קבצים אלה ופלט את ההוראות המתאימות לבניית פלטפורמת היעד.
מאפיינים מרכזיים של CMake כוללים:
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ,0) מרבי גנרטורים: FLT:1 תומך בנינג'ה, Visual Studio, Xcode ואחרים.
- מקור:0Out-of-sources: FLT:1 Keeps Building פריטים נפרדים קוד מקור.
- (ב) ,0) ,Extensibility: FLT:1 מודולים, פונקציות ומאקרו מאפשרים לוגיקה בנייה מחדש.
- (ב) התגלות:0 (ב) התגלות:2 (ב) ,2 ,2 אתרים) תואמים את הספריות והראשיים.
- (ב) ⁇ :0) אינטגרציה עם CI/CD:03FLT:1 פועל בצורה חלקה בצינורים אוטומטיים.
CMake הפך לסטנדרט דה- Facto לפיתוח חוצה פלטפורמות במערכת האקולוגית C ו- C++, המשמש פרויקטים מגוונים כמו LLVM, MySQL, ואת הסביבה כולה של שולחן העבודה של KDE.
יתרונות השימוש CMake for Cross-Platform C Development
אימוץ CMake מביא מספר יתרונות קונקרטיים מעבר ליכולת פשוטה:
- מקור האמת: FLT:0Single Source of Truth: FLT:1 כתוב פעם לוגיקה וליצור קבצים עבור כל פלטפורמה, ביטול תסריטים שבריריים או ערכות ספציפיות פלטפורמה.
- (ב) אינטגרציה:0) צוותים יכולים לעבוד ב- Visual Studio, CLion, Xcode או VS Code תוך שיתוף אותו FLT 3:
- מבנה הפרויקט:0 (FLT:103) השימוש ב-FLT:4 כדי לחלק פרויקטים גדולים לרכיבים הניתנים לניהול עם תלותם.
- (ב) לוגיקה מורחבת:0 (Conditional Logiceural: FLT:1) החל דגלים ספציפיים בפלטפורמה, קבצים המקור או ספריות רק כאשר יש צורך, ללא ציות של תצורה שלמה.
- (ב) ,0) טיפול בתלות: (ב) 1 (FLT:5 ו-FLT:6) פשטו באמצעות ספריות של צד שלישי.
- (ב) ⁇ :0) ⁇ ואריזות: 1FLT:1 CTest ו-CPack משולבים בקפידה, מה שהופך אותו טריוויאלי להוסיף בדיקות וליצור מתקין.
- (ב) ביצועים:0Build Performance:Build FLT:1 נינג'ה גנרטור בשילוב עם CCache מפחית את הבנייה באופן דרמטי.
- [הקהילה]: [הקהילה]: [ה] [ה]] [ה]] [ה]]] [ה']] [ה']'[ה]']'[ה']'[דרוש מקור]'], ו[ה'[ה'[ה']'[ה'[ה']'[ה']'[ה']'[ה'[ה'[ה']']'[ה']']'[ה'[ה']']'[ה'[ה'[ה'[ה'[ה'[ה']']']'[ה'[ה'[ה']']']']
תחילתו: הקמת CMake for a C Project
סעיף זה עובר דרך זרימת העבודה המלאה מהתקנה ועד למבצע מואסף בשלוש פלטפורמות עיקריות.
התקן CMake
הורד את בינארי האחרון מ-FLT:0 (cmake.orgearFLT:1) או השתמש במנהל החבילה של המערכת שלך:
- [[1924]]]]]] [[1924]]]]]]]]
- (ב) ויקרא י"ד: "ה' אלקים" (בראשית כ"ד)
- (ב) ,0 חלונות: ⁇ 1) להפעיל את ההתקנה ולהבטיח "Add CMake to the system PATH" נבחר.
בדוק את ההתקנה עם גירסאות 9.10 או גבוה יותר מומלץ עבור התכונות המדוברות כאן.
לכתוב CMakeLists מינימלי
צור קובץ בשם FLT:10 בשורש הפרויקט שלך להלן הוא דוגמה מינימלית לפרויקט יחיד של קוד C:
cmake_minimum_required(VERSION 3.10)
project(HelloWorld C)
add_executable(hello main.c)
התמוטטות:
- (FLT:12) מגדיר את גרסת CMake המינימלית.זה גם מאפשר עדכוני מדיניות שמשפרים את ההתנהגות.
- (FLT:13) מגדיר את שם הפרויקט ואת השפה.specifying 14) מונע CMake לסרוק עבור C++ מדגמים.
- (ב) "ה' אומר: "ה' אלקים'" (בראשית כ"ד, ט)
דוגמה מעט יותר מציאותית מוסיפה דגלי פיטורים ותלויה רק בראש:
cmake_minimum_required(VERSION 3.15)
project(Calculator C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
add_executable(calc main.c parser.c)
target_include_directories(calc PRIVATE include)
שם (ב) , [15] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
ליצור קבצים
צור מנהל בנייה ולנהל CMake:
mkdir build
cd build
cmake ..
בלינוקס/macOS זה מייצר פרופיל כברירת מחדל.ב-Windows עם Visual Studio, הוא יוצר קובץ ההרחבה:23.
לאחר דור, תוכל להעביר אפשרויות בזמן מוגדר:
cmake .. -DCMAKE_BUILD_TYPE=Release -DMY_FEATURE=ON
שינויים אלה נשמרים ב-FLT:26, והם משומרים על רצף הבא.
4.הבנה את הפרויקט
לאחר יצירת קבצים, הרכיב:
- (ב) ויקרא י"א: "ה' (ב"ד)" (ב"ד)
- (ב) ,0) סטודיו וירטואלי: 1FLT
- [[1924]]]]]]
ה[[1848]] הוא [[1924]], [[1924]], [[1924]]]], [[1924]]]], [[1924]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]]]
טכניקות מתקדמות לפרויקטים אמיתיים
מעבר ליסוד, CMake מציע תכונות אשר פולטות בנייה גדולה או מורכבת יותר. Mastering אלה יחסוך זמן ולהפחית שגיאות.
ניהול תלות עם Find package
אתר הפיקוד של ה-FLT:32 וקבוע את המשתנים עבור נתיבים וקבצי הספרייה שלהם. מודרני C גורם לעודד באמצעות FLT:0imported מטרותsFLT:1 עבור הסתמכות נקייה:
find_package(SDL2 REQUIRED)
target_link_libraries(my_app PRIVATE SDL2::SDL2)
מטרות מיובאות באופן אוטומטי לשאת ספריות, הגדרות ייצור ודגלים קישור.אם הספריה אינה מספקת קבצי CMake config, ייתכן שתצטרך מודול Find. Write your own orסתמך על חברי הקהילה ב-FLT:0cmake-developerpherpherphFLT:1.
עבור תלות ללא התקנה כלל-מערכתית, מורידים ושילוב קוד המקור בזמן מוגדר:
include(FetchContent)
FetchContent_Declare(
zlib
GIT_REPOSITORY https://github.com/madler/zlib.git
GIT_TAG v1.3
)
FetchContent_MakeAvailable(zlib)
target_link_libraries(my_app PRIVATE zlib)
גישה זו מבטיחה בנייה מחדש על ידי סיכת גרסאות ספציפיות.
עקבו אחרי CTest
CMake משלבת בדיקות באמצעות CTest, ניתן להגדיר בדיקות ב-FLT:36 שלך:
enable_testing()
add_executable(test_parser test_parser.c)
target_link_libraries(test_parser PRIVATE parser_lib)
add_test(NAME ParserTest COMMAND test_parser)
רוץ עם:
ctest --output-on-failure
CTest תומך בתיקוןי מבחן, תוויות, זמן וביצוע מקבילה.לבדיקות מקיפים יותר, לשקול שילוב עם מסגרת מבחן יחידה כמו FLT:0 ס"מ ockacioFLT:1 על ידי קישור לספרייה שלה ושימוש ב-FLT:39.
Cross-Compilation
(ה) פשטו את התפוצה דרך ה-FLT:0t [ ⁇ ] ⁇ [ב] קובץ כלי שרשראות קובע את המאגד, הסימפול, ואת ארכיטקטורת היעד.
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_SYSROOT /path/to/sysroot)
לאחר מכן, השתמש CMake עם הכלי שרשרת:
cmake -DCMAKE_TOOLCHAIN_FILE=arm-cross.cmake ..
(ג) באופן אוטומטי להשתמש ב- cross-compiler המפורט וחפש את ה-Samsroot עבור ספריות.טכניקה זו עובדת עבור מערכות משובצות, פלטפורמות סלולריות, וכל תרחיש שבו מכונת הבנייה שונה ממכונת היעד.
התקנת וחבילה
השתמש בהוראות כדי להגדיר כיצד הפרויקט שלך צריך להיות מופקד:
install(TARGETS my_app DESTINATION bin)
install(FILES config.ini DESTINATION etc)
לאחר מכן, CPack יוצר מתקין: DEB, RPM, NSIS, DMG וכו 'להוסיף בסוף ה-FLT:45 שלך:
include(CPack)
לרוץ (FLT:47) כדי לייצר חבילה דבינית. CPack יורש את כל הכללים להתקין ומאפשר התאמה אישית באמצעות משתנים כמו FLT:48.
מלכודות נפוצות ועיסוקים טובים
אפילו מפתחים מנוסים פגעו ב snags.כאן הם נושאים תכופים וכיצד להימנע מהם:
« « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « מלכוד מלכוד « « « « « « מלכוד מלכוד « « « « « « מלכוד « « « מלכוד « « « « « « « « מלכוד « « « « « « « מלכוד « « מלכוד מלכוד « « מלכוד « « מלכוד מלכוד « « מלכוד מלכוד « « « מלכוד: נתיבים: « « « « « « « « « מלכוד מלכוד
לעולם אל תשתמשו בנתיבים מוחלטים ב-FLT:49 ו-FLT:51 ביחס לעץ המקור.
פיט: התעלמות מגנרטורטור אקספרסions
ביטויים גנרטורים (ראה FLT:53) להעריך בזמן בנייה, לא להגדיר זמן.הם חיוניים להגדרות של תצורה:
target_compile_definitions(my_app PRIVATE
$<$<CONFIG:Debug>:_DEBUG>
)
כך ניתן להוסיף ל[[1924]], אך ורק ל[[1924]], משום ש[[המאה ה-20]], לא נקבעו על ידי [[המאה ה-20]].
« « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « «
(ב) ,[[1924]], [[1924]]]], [[1924]]]], [[1924]]]], [[1924]]]]]], [[1924]]]], [[1924]]]]]], ו[[1924]], ו[[1924]]]], [[1924]]]], [[1924]]
פיט: לא להשתמש בסקוטי נכון כדי למצוא package
(ב) ,התיק (ב) ב[[1924]], ב[[1924]], [[1966]], [[1966]], [[1924]]]], [[1924]]]]]], [[1966]]]]]], [[1966]]]]]]]]]] ו[[1948]], [[1924]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]
מסקנה
CMake הופך את האתגר של פיתוח רב-פלטפורמות C לתוך תהליך מנוהל, חוזר על ידי כתיבת קבוצה אחת של הוראות בנייה, אתה מקבל ביצועים מקומיים, תמיכה IDE וניהול תלות חזק על פני כל מערכות ההפעלה הגדולות.התחל עם פשוט (FLT:67) בהדרגה לאמץ תכונות מתקדמות - עדות, חתך, אריזה - כמו הפרויקט שלך גדל.