Table of Contents
ساخت برنامه های C که به طور قابل اعتماد در سراسر ویندوز، macOS و Linux اجرا می شوند، نیاز به بیش از کد منبع قابل حمل دارد – این سیستم را می طلبد که با استفاده از ابزار بومی پلتفرم سازگار شود. CMake، یک ژنراتور سیستم باز منبع باز، این را با اجازه دادن به شما پروژه های خود را در یک فایل پیکربندی ساده تعریف کنید و سپس تولید فایل های خاص پیشرفته (فایل، راه حل، ساخت فایل های ساده، و غیره، تنظیم فایل های ساده، و غیره را برای ساخت فایل های ساده، و غیره را فراهم می کند.
CMake چیست؟
CMake یک سیستم meta-build است: کد را به طور مستقیم کامپایل نمی کند، اما فایل های ورودی را برای سایر سیستم های ساختمانی ایجاد می کند.شما پروژه خود را در فایل های با استفاده از یک زبان خاص دامنه توصیف می کنید. CMake سپس این فایل ها و خروجی ها را بخوانید دستورالعمل های مناسب برای پلت فرم هدف.
ویژگی های کلیدی CMake شامل:
- [Platformform-agnostic]: همان بر روی یونیکس، ویندوز و macOS کار می کند.
- چند ژنراتور: پشتیبانی از ساخت، نینجا، ویژوال استودیو، Xcode و دیگران.
- [در این میان] [از منبع] ساخته شده است: [[۱]] [۱۰] [۱] ساخت آثار باستانی جدا از کد منبع.
- قابلیت: ماژول ها، توابع و ماکروها اجازه می دهند تا منطق قابل استفاده مجدد ایجاد شود.
- کشف: [FLT 2:2] مکان های نصب شده کتابخانه ها و هدرها.
- عدم توافق با CI / CD: به طور یکپارچه در خط لوله خودکار کار می کند.
CMake به استاندارد de facto برای توسعه متقابل پلتفرم در اکوسیستم C و C ++ تبدیل شده است که توسط پروژه ها به عنوان متنوع به عنوان LLVM، MySQL و کل محیط دسکتاپ KDE استفاده می شود.
مزایای استفاده از CMake برای توسعه Cross-Platform C
اتخاذ CMake مزایای مشخصی را فراتر از پورتینگ ساده به ارمغان می آورد:
- منبع حقیقت: نوشتن منطق یک بار و تولید فایل برای هر پلت فرم، حذف اسکریپت های پوسته شکننده یا فایل های خاص پلت فرم.
- ادغام: تیم ها می توانند در Visual Studio، CLion، Xcode یا VS Code کار کنند و در عین حال همان را به اشتراک بگذارند .
- ساختار پروژه موداتیک: [FLT 1] از برای تقسیم پروژه های بزرگ به اجزای قابل مدیریت با وابستگی های خود استفاده کنید.
- منطق داوری: [FLT 1] پرچم های خاص پلت فرم، فایل های منبع، یا کتابخانه ها را تنها در صورت نیاز، بدون تکرار کل پیکربندی اعمال کنید.
- [FLT: 1 ] [ ] و ساده سازی با استفاده از کتابخانه های شخص ثالث.
- تست و بسته بندی: CTest و CPack به شدت یکپارچه شده اند، و آن را به اضافه کردن تست ها و نصب کنندگان.
- عملکرد ساخت: Ninja Generator همراه با CCache زمان بازسازی را به طور چشمگیری کاهش می دهد.
- جامعه فعال: ثورو اسناد رسمی [FLT3] و اکوسیستم پر رونق ماژول ها و آموزش ها.
شروع کار: راه اندازی CMake برای یک پروژه C
این بخش از طریق جریان کار کامل از نصب تا یک اجرای کامپایل شده در سه سیستم عامل اصلی پیاده روی می کند.
نصب CMake
دانلود بازی جدید بازی The Last binary از cMake.org یا استفاده از مدیر بسته سیستم خود را:
- [[ویرایش] [[۱۰] [[۱۰]] [[۱۰]] [[۱۰]]] [[۱۰]]] [[۳]] [۱۰] [۱] [۱۰] [۱] [۱۰] [۱] [۱۰] [۱] [۳] [۱] [۳] [۳] [۱] [۳] [۳] [۳] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۳] [۳] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۳] [۳] [۳] [۳] [۳] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۳] [۳] [۱] [۱] [۱] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۳] [۳] [۳
- [در این باره] [[[۱۰]] [۱۰] [۱۰] [۱۰]] [۱۰] [۶] [۳] [۱۰] [۳] [۱۰] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۳] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۸] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [
- ویندوز: نصب کننده را اجرا کنید و اطمینان حاصل کنید که "اضافه کردن CMake به سیستم PATH" انتخاب شده است.
بررسی نصب با نسخه 3.10 یا بالاتر برای ویژگی های مورد بحث در اینجا توصیه می شود.
۲- یک مینی CMakeList بنویسید.txt
ایجاد یک فایل به نام (FLT:10) در ریشه پروژه خود را در زیر یک مثال حداقل برای یک پروژه تک منبع C است:
cmake_minimum_required(VERSION 3.10)
project(HelloWorld C)
add_executable(hello main.c)
شکست:
- حداقل نسخه CMake را تنظیم می کند، این همچنین به روز رسانی های سیاسی را که رفتار را بهبود می بخشد، فعال می کند.
- [FLT13] نام پروژه و زبان را تعریف می کند. {{FLT:14}} از اسکن برای کامپایلرهای ++C جلوگیری می کند.
- [در این باره] به CMake می گوید که هدف [FLT16] باید از [FLT17] ساخته شود.
یک مثال کمی واقع گرایانه تر، پرچم های کامپایلر و یک وابستگی به هدر را اضافه می کند:
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)
در اینجا [FLT 19] اضافه می کند [و] [FLT 19] [به] مسیر جستجوی هدر کامپایلر فقط برای هدف .
۳- ساخت فایل های Generate Build Files
یک دایرکتوری بسازید و CMake را اجرا کنید:
mkdir build
cd build
cmake ..
در لینوکس / macOS این یک فایل را به طور پیش فرض بر روی ویندوز با Visual Studio نصب می کند، یک فایل را تولید می کند تا یک ژنراتور متفاوت را درخواست کند، از استفاده کنید.
بعد از نسل، می توانید گزینه ها را در زمان پیکربندی ارسال کنید:
cmake .. -DCMAKE_BUILD_TYPE=Release -DMY_FEATURE=ON
این متغیرها در [[FLT 26]] ذخیره شده و در مراحل بعدی استفاده می شوند.
۴- ساخت پروژه
هنگامی که فایل های ساخت ایجاد می شوند، کامپایل می شوند:
- [[ویرایش] [۱] [۱۰] [۱] [۱۰] [۱] [۱۰] [۱۰] [۳] [۲] [۲] [۲] [۲] [۳] [۲] [۲] [۳] [۲] [۲] [۳] [۲] [۳] [۲] [۲] [۳] [۳] [۲] [۵] [۵] [۳] [۳] [۳] [۵] [۵] [بر روی تمامی پلتفرم ها و [بر روی [بر روی [بر روی [۳۲] [۳] [۳۲] [۳۲] [۶] [۳] [۳] [۳] [۵] [۶] [۶] [۳] [۳] [۳] [بر روی [بر روی [۳] [بر روی [۳] [بر روی [بر [بر [بر روی [بر روی [بر روی [بر روی [بر روی تمامی پلتفرم ها [بر روی [بر روی [بر روی [بر روی [بر روی [بر روی [بر روی [بر روی [بر روی [۶] [۶] [۶] [بر روی [بر روی [بر روی [بر روی [۶] [بر روی [
- [[ویرایش] [۱] [۱۰] [۱] [۱۰] [۱] [۱۰] [۱] [۱] [۲] [۲] [۱] [۲]] [۳] [۱] [۲] [۳] [۲] [۳] [۳] [۱] [۲] [۳] [۱] [۳] [۱] [۲] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۲] [۳] [۱] [۳] [۳] [۲] [۲] [۳] [۱] [۱] [۱] [۳] [۳] [۳] [۳] [۱] [۳] [۳] [۱] [۳] [۳] [۳] [۲] [۳] [۳] [۳] [۳] [۳] [۱] [۱] [۳] [۱] [۱] [۱] [۱] [۳] [۳] [۲] [۲] [۲] [۳] [۲] [۲] [۲] [۳] [۳
- [[ویرایش] [۱] [۱۰] [۱] [۱۰] [۱۰] [۱] [۱۰] [۱] [۲] [۲] [۱۰] [۱] [۲] [۳] [۲] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۱] [۱] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۲] [۲] [۳] [۳]
فرمان متقابل پلت فرم است و از کارهای خاص پلتفرم اجتناب می کند.
تکنیک های پیشرفته CMake برای پروژه های واقعی جهانی
فراتر از اصول، CMake ویژگی هایی را ارائه می دهد که ساده سازی ساختارهای بزرگتر یا پیچیده تر را انجام می دهد. تسلط بر این ها زمان را صرفه جویی می کند و خطا را کاهش می دهد.
مدیریت وابستگی ها با Find package
دستور مکان های نصب شده کتابخانه ها و متغیرهای برای فایل های شامل مسیرهای و کتابخانه خود را تنظیم می کند. مدرن CMake با استفاده از اهداف گزارش شده برای انتشار وابستگی تمیز:
find_package(SDL2 REQUIRED)
target_link_libraries(my_app PRIVATE SDL2::SDL2)
اهداف وارداتی به طور خودکار شامل دایرکتوری ها، تعاریف جمع آوری شده و پرچم های لینک است. [اگر کتابخانه فایل های پیکربندی CMake را ارائه نمی دهد، ممکن است به ماژول Find خود نیاز داشته باشید یا به افراد جامعه در cMake- Developmenter] تکیه کنید.
برای وابستگی بدون نصب سیستم، بارگیری و ادغام کد منبع در زمان پیکربندی:
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 تکمیل می کند و تست ها را در (FLT36) شما تعریف می کند:
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 از وسایل تست، برچسب ها، تایمر و اجرای موازی پشتیبانی می کند.برای آزمایش جامع تر، ترکیب با یک چارچوب تست واحد مانند cmocka] را با لینک کردن کتابخانه و استفاده از [FLT 39] در نظر بگیرید.
صلیب-Compilation
{{bjectation}} را از طریق فایل های زنجیره ای ساده سازی کنید یک فایل ابزار زنجیره ای کامپایلر، sysroot و معماری هدف را تنظیم می کند.
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 with the Toolchain به آن اشاره کنید:
cmake -DCMAKE_TOOLCHAIN_FILE=arm-cross.cmake ..
CMake به طور خودکار از cross-compiler مشخص شده استفاده می کند و sysroot را برای کتابخانه ها جستجو می کند.این تکنیک برای سیستم های جاسازی شده، پلتفرم های تلفن همراه و هر سناریویی که در آن دستگاه ساخت با ماشین هدف متفاوت است، به رسمی (FLT:0Cross تکمیل شده با CMake[F:1] راهنمای برای جزئیات اشاره می کند.
نصب و بسته بندی
استفاده از دستورات برای تعریف اینکه چگونه پروژه شما باید استقرار یابد.
install(TARGETS my_app DESTINATION bin)
install(FILES config.ini DESTINATION etc)
سپس شرکت های سازنده: DEB، RPM، NSIS، DMG و غیره در پایان خود اضافه می کنند.
include(CPack)
اجرای برای تولید یک بسته دبیان، CPack همه قوانین نصب را به ارث می برد و اجازه می دهد تا سفارشی سازی را از طریق متغیرهای مانند به ارث ببرد.
قرص های معمول و بهترین روش ها
حتی توسعه دهندگان با تجربه به snags ضربه می زنند، در اینجا مسائل مکرر و چگونگی جلوگیری از آنها وجود دارد:
دانلود بازی اندروید The Hard Encrypts
هرگز از مسیر های مطلق در استفاده نکنید و [FLT51] نسبت به درخت منبع، برای مکان های فایل زمان اجرا، از برای جاسازی مسیر یا تکیه بر دایرکتوری های نصب استفاده کنید.
دانلود زیرنویس فارسی فیلم Ignoring Generator Expressions
در این میان، در زمان های مختلف، به صورت منظم و بدون نیاز به استفاده از آن، به صورت زیر به صورت زیر عمل می کنند.
target_compile_definitions(my_app PRIVATE
$<$<CONFIG:Debug>:_DEBUG>
)
این امر به معنی استفاده از [[FLT 56]] است که از استفاده از آن استفاده می شود زیرا ژنراتورهای چند پیکربندی (Visual Studio, Xcode) در زمان پیکربندی، از آن استفاده نمی کنند.
دانلود بازی Pitfall: Overuse Global Commands
در این میان، فرمان هایی مانند [FLT ]، بر همه اهداف تأثیر می گذارد، و دستورات خاص مورد نظر را ترجیح می دهند، مانند ] و برای مهار بهتر.
دانلود بازی Pitfall: Not Use Fit for Find package
در این میان، به طور مناسب با استفاده از و سپس اهداف آن را به اشتراک بگذارید، از و دایرکتوری های لینک دستی استفاده نکنید مگر اینکه کاملا ضروری باشد.
نتیجه گیری
CMake چالش توسعه چند پلتفرم C را به یک فرایند قابل مدیریت و تکراری تبدیل می کند.با نوشتن یک مجموعه از دستورالعمل های ساخت، شما عملکرد بومی، پشتیبانی IDE و مدیریت وابستگی قوی در تمام سیستم های عامل اصلی را به دست می آورید.از طریق یک سیستم عامل ساده (FLT:67) شروع کنید و به تدریج ویژگی های پیشرفته را اتخاذ کنید - تست، بسته بندی، به عنوان پروژه یادگیری شما در هر مرحله ای متفاوت، بدون ایجاد یک سیستم عامل، یا باز کردن یک سیستم عامل، بدون استفاده از کار، شروع می کند.