هر کی با زبان ++c/c بخواهد کار کند، حتما با cmake برخورد خواهد داشت، اما برای اینکه با cmake آشنا بشیم اول باید با مفهومهای make و makefile آشنا بشیم.
چون زبانهای ++c/c، زبانهای کامپایلری هستند، برای اجرای آنها نیاز به کامپایلر است، و معروفترین کامپایلر زبان ++c/c کامپایلر gcc است که gnu make آن را ایجاد کرده است.( در لینوکس به طور پیشفرض نصب است.) اگر نصب نبود میتوانید با دستور زیر آن را نصب کنید.
sudo apt install build-essential
make
make یک دستور است که برای کامپایل باینری اجرایی نهایی پروژههای منبع باز استفاده میشود، برای استفاده از این ابزار لازم است فایل (یا فایلهایی) تحت عنوان Makefiles در اختیار این ابزار قرار بگیرد.
makefile
این فایلها در واقع به این خاطر استفاده میشن که به ابزار make بفهمونن چطوری باید فرایند Build یک پروژه خاص رو انجام دهد.
ساختار makefile به صورت زیر است:
Target : prerequisite1 prerequisite2 prerequisite3 …
Command1
Command1
Targets : نام فایلهایی که قرار است پس از اجرا ایجاد یا بهروزرسانی شوند.
Prerequisites : لازمههای target هستند، در واقع این فایل ها (از هم جدا شده با فاصله) که target از آنها ساخته شده است.
Commands : قوانینی که نحوه ایجاد یا به روز رسانی هدف را هنگام تغییر وابستگی ها توضیح می دهد.
در نهایت این make است که این دستورات makefile را میخواند و به دنبال پروسه کامپایل و ساختن برنامه(build) میرود. این makefile همچین تو دل برو نیست و به دو دلیل ساختار طولانی خواهد داشت. ۱-مشکلی که این وسط وجود داشت این بود که برای هر زیر پروژه و یا پوشه باید جداگانه makefile میساختیم که باعث میشد تعداد زیادی makefile داشته باشیم و همچنین ۲-اگر تعداد سورس کدها زیاد باشد در قسمت Prerequisites باید تعداد زیادی نام فایل بنویسیم. اینجا بود که cmake وارد عمل شد.
Cmake
Cmake زبان سادهتری دارد و همچنین دستورات پرکاربردتری برای دستور دادن به کامپایلر دارد و میداند چگونه باید makefile درست کند، این فایلی که درست میکند تمیزتر و دقیقتر از makefileای است خودمون باید مینوشتیم. در واقع cmake، یک make makefile است و این فایلی که میسازد را میدهیم به make که میداند چگونه از روی این فایل، به کامپایلر دستور دهد تا برنامه ما ساخته شود. فایلهای cmake با نام CmakeLists.txt نامگذاری میشوند.
معروفترین دستورات cmake:
دستور message: پرینت کردن پیام دلخواه
دستور cmake_minimum_required: مشخص کردن حداقل نسخه cmake برای استفاده
دستور add_executable: اضافه کردن خروجی اجرایی
دستورadd_library: اضافه کردن کتابخانه برای کامپایل شدن همراه سورس
دستور add_subdirectory: زیرپوشهای را به سیستم build اضافه میکند.
ساخت cmake در vscode
با اینکه ساختن makefile با وجود cmake برامون آسونتر شد، اما خب بیاید شیرازی بازی در بیاریم و بگیم ساخت cmake هم برامون سخته، اگر از محیط vscode استفاده میکنید، vscode یک command wizard دارد که با پرسش چند تا سوال برامون cmake درست میکند.
برای ساخت cmake در vscode باید مراحل زیر را به ترتیب اجرا کنیم:
extentionهای زیر را در vscode نصب کنید.
اگر فولدری برای پروژه خود ایجاد کردید آن را در vscode باز کرده و بعد پنل کامند را باز کنید(Ctrl+Shift+P). کلمه زیر را در پنجره باز شده سرچ کنید و گزینه cmake: Quick Start را انتخاب کنید .
نامی برای پروژه بنویسید.
در گزینههایی که در صفحه آمده، ++c را انتخاب کنید.
حال نوع فایل خروجی را انتخاب کنید که میخواهید یک کتابخانه(library) یا یک فایل اجرایی (executable) باشد.(در اینجا ما به یک فایل اجرایی نیاز داریم تا متن ما نمایش داده شود.)
بعد از زدن enter فایل CMakeLists.txt برای کد شما ساخته میشود که همان فایل cmake است که قبلا توضیح دادیم و همچنین پوشه build نیز به صورت خودکار برای شما ساخته میشود.
خب حالا اگر تغییری در کد اصلی خود میخواهید ایجاد کنید برای اجرای باید اول آن را build کرده و بعد روی دکمه اجرا بزنید که هر دو در پایین صفحه vscode قرار دارند.
بعد از build وقتی روی دکمه لانچ بزنید خروجی کد شما در ترمینال نمایش داده میشود.
به همین سادگی یک کد ++c را با استفاده از cmake در vscode اجرا کردهاید.
make و cmake چیست و چطوری میتونم تو vscode اجرا کنم؟