از اونجا که پروژههای بزرگ برای تولید خروجی نهایی ممکنه زمان زیادی رو از تیم برنامه نویس به گیره و همچنین احتمال رخداد خطاهای انسانی تو این فرایند هم بالاست به همین خاطر ناچار هستیم از ابزار سودمندی که GNU برای استفاده منتشر کرده استفاده کنیم. این ابزار عنوانهای مختلفی داره که مهمترین شون Build management software هستش که فک میکنم این اسم به خوبی هدف از به کارگیری این ابزار رو مشخص می کنه! تو سایت رسمی GNU ابزار Make File رو اینطور تعریف کرده:
Tool that controls the generation of executable and other non-source files of a program from the program’s source files.
برای استفاده از این ابزار لازمه فایل (یا فایلهایی) تحت عنوان Make files در اختیار این ابزار قرار بگیره. این فایلها در واقع به این خاطر استفاده میشن که به ابزار Make بفهمونن چطوری باید فرایند Build یه پروژه خاص رو انجام بده.
اهمیت مهم دیگه Make file ایجاد امکانی هستش که تو فرایند Version Control خیلی میتونه مؤثر باشه. بذارید بیشتر توضیح بدم. فرض کنید شما کدتون رو تو یه محیط اشتراک کد مثه Github قرار دادید و یه make file هم براش نوشتید و کنارش گذاشتین. حالا بعد یه مدت بعضی از قسمتهای کدتون رو تغییر میدین به نحوی که تو فرایند کامپایل هم این تغییرات تأثیرگذار هستند مثلاً یه سری فلگ ها رو باید تو دستوراتتون تغییر بدین. کاری که میشه انجام داد اینه که خیلی ساده فقط این فلگ ها رو توی Make file عوض کنید. به این ترتیب هرکس که اون Make file رو اجرا کنه بدون اینکه بدونه در گذشته چه بلاهایی سر کد در اومده میتونه خروجی مطلوب رو دریافت کنه.
کار با make file
خب حالا که با این ابزار تا حدی آشنا شدیم ببینیم اصولاً چطوری کار میکنه و ما چطور میتونیم ازش استفاده کنیم؟
داخل Make file تعداد build rule وجود داره که به فرمت زیر هستند:
Target : prerequisite1 prerequisite2 prerequisite3 …
Command1
Command2
…
برای مثال یه build rule رو به صورت زیر تصور کنید:
My_file.o : my_file.c my_file.h
Gcc –c my_file.c –o my_file.o
خب حالا اگه دستور زیر رو توی ترمینال وارد کنیم :
$ make my_file.o
با اجرای این دستور ابزار Make میاد تو make file دنبال تارگتی به اسم my_file.o میگرده و اگه prerequisite هایی که براش مشخص شده هم برقرار باشه (تو این مثال فایلهای my_file.c و my_file.h داخل دایرکتوری پروژه وجود داشته باشن) اونوقت میره و دستورات این build rule رو اجرا می کنه.
ساختار کلی make file
ساختاری که برای نوشتن Make file به کار میره:
- استفاده از # برای نوشتن کامنت ها
- میتونه یه سری Make file دیگه رو include کنه داخل خودش
- میتونه متغیر داخلش تعریف بشه و از این متغیرها هم استفاده شه
- میتونه Build rule های مختلفی رو داخلش داشته باشه
- دستورات اجرایی هر Build rule با یه tab نسبت به خط اول نوشته میشن
- برای ادامه خطها در خط بعد از “\” استفاده میشه
در تصویر زیر مثالی از یک Make file ساده رو میتونید ببینید:
خب احتمالاً تا همین مرحله کافیه اگرچه نوشتن Make file کلی بحثهای پیشرفته دیگه هم داره که اینجا بهش پرداخته نشد.
ابزار های GNU
در انتها هم به معرفی یه سری از ابزارهای GNU میپردازیم که میتونه تو روند برنامه نویسی و دیباگ کردن پروژهها به خصوص به منظور انجام بهینه سازی ها کمک قابل توجهی کنه. البته اینم بگم که GNU ابزارهای خیلی زیادی برای توسعه نرم افزارها داره که ما اینجا صرفاً به اونایی اشاره میکنیم که مهندسای سخت افزار به کارشون میاد!
اولین ابزار که بهمون کمک می کنه سایز بخشهای مختلف تو کد کامپایل شده رو بفهمیم به صورت زیر قابل استفادست. طبیعتاً استفاده از این ابزار با توجه به شناختی که نسبت به معماری حافظه داریم باعث میشه قسمتهایی از کد که Performance رو کاهش میده پیدا کنیم و براشون چارهای بیندیشیم!
arm–none-eabi-size –Atd demo.out
این مقاله را از دست ندهید
آزادی، معجزهی GNU
ابزار objdump
ابزار بعدی objdump هستش که با دریافت آبجکت فایل میتونه کد اسمبلی هر قسمت رو به صورت جداگانه نمایش بده. آخرین ابزاری هم که معرفی خواهیم کرد readelf هست که اطلاعات مهمی رو میتونه از فایلهای خروجی با پسوند *.elf استخراج کنه و نمایش بده. اطلاعاتی راجع به بخشهای کامپایل شده،بخشهای حافظه، جدول نمادها (symbol table) و در نهایت اطلاعات معماری سخت افزار. برای استفاده از این ابزارها هم دستوری مثل دستور زیر رو میتونیم به کار ببریم:
arm-none-eabi-readelf demo.out –all
در انتها هم لازمه عرض کنم تمامی این ابزارها رو میشه تحت عنوان پکیج GNU binutils پیدا کرد.
امیدوارم این مطلب براتون مفید بوده باشه:)
منبع:سیسوگ