از نرم‌افزار تا سخت‌افزار – قسمت پنجم – معجزه ای به نام Make file

blog
۱۳۹۹-۰۴-۱۵
3 دقیقه

از اونجا که پروژه‌های بزرگ برای تولید خروجی نهایی ممکنه زمان زیادی رو از تیم برنامه نویس به گیره و همچنین احتمال رخداد خطاهای انسانی تو این فرایند هم بالاست به همین خاطر ناچار هستیم از ابزار سودمندی که 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

خب احتمالاً تا همین مرحله کافیه اگرچه نوشتن 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 پیدا کرد.
امیدوارم این مطلب براتون مفید بوده باشه:)

اطلاعات
7
0
لینک و اشتراک
مقالات مرتبط
profile

سعید حقیقی پور

متخصص الکترونیک

تا حالا به این فکر کردین که تو یه سیستم کامپیوتری GPU چقدر کارآمد و مهمه ولی به اندازه CPU شناخته شده نیست.یه جورایی همون "مجهولون فی الارض معروفون فی السماء" که میگن! یه حسی بهم میگه کاش بتونم مثه GPU باشم :)

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند.
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند.
family

دیدگاه ها

panda ! گفت :
۱۳۹۹-۰۴-۱۷ ۰۵:۵۵
سلام، واقعا این سری مقالتون خیلی خوب هستش. جذاب و خفن!!!
سعید گفت :
۱۳۹۹-۰۴-۱۷ ۱۴:۱۲
سلام خوشحالم که برات مفید بوده :) اگه پیشنهادی برای ادامه آموزش ها داری هم حتما تو کامنتت بگو که برم سراغش و آموزشش رو اینجا بذارم در صورت امکان
panda ! گفت :
۱۳۹۹-۰۴-۱۷ ۱۷:۰۷
هوممم، همون طور که خودت هم گفتی بیشتر به عنوان سر نخ مطالب و توضیحات کلی و البته جامع هستش. پتانسیل این مطالب بالاست. اگه بشه یه خورده بیشتر مطالب شکافته بشه و برای فهم بیشتر،مثالی هم زده بشه خیلی بهتر میشه. شاید طولانی تر بشه ولی مفید تر و خوندنی تر میشه. چون منابع فارسی هم تو این زمینه نادر هستن.در مورد ریجستر نویسی و یا توضیحاتش هم اگه بنویسی خوب میشه! نقش پروتوکل های ارتباطی تو این قضیه و یا حتی توضیحات اونادر ادامه هم بعد از اتمام کلیات میشه چند تا ایده رو بررسی کرد.مثلا: 1) بعد تولید *.s یه سری تغییرات خودمون برای بهینه کردن برنامه ،روشون انجام بدیم. 2) نوشتن یه کامپایلر محدود و کوچیک 3)یه برنامه ساده(مثلا toggle led) رو به عنوان مثال، بخش های مختلفش رو بررسی کرد. 4) stm32cube چجوری کد اولیه رو تولید میکنه و... ( البته در مورد عملی بودنشون نمیدونم و خواستم برا مثال چند تا بنویسم)البته اینا فقط نظر منه:)
سعید حقیقی پور گفت :
۱۳۹۹-۰۴-۱۸ ۱۸:۴۱
آره اتفاقا تصمیم داشتم یه آموزش راجع به برنامه نویسی اسمبلی میکروهای ARM بذارم.البته مهندس کی نژاد یه آموزش برای AVR دارن تو سایتشون که خیلی خوب گفتن بحث اسمبلی رو ولی خب برای ARM هنوز من ندیدم کسی کار کرده باشه.مرسی از پیشنهاداتت!
حسین گفت :
۱۳۹۹-۰۴-۱۵ ۲۲:۰۸
سلام . استفاده بردم . اما تقریبا تیتر وار و خیلی خلاصه گفته شده . براتون مقدور هست با جزییات بیشتر توضیح بدید؟( البته از حق نگذریم برای هرکدوم از اون ابزاره ممکنها چند قسمت مطلب لازم باشه ) سپاس
سعید گفت :
۱۳۹۹-۰۴-۱۵ ۲۲:۴۳
سلام حسین جان خوشحالم که مفید بوده برات همونطور که خودت هم اشاره کردی بسط این مطالب نیاز به چندین مقاله مفصل داره که هم از حوصله اینجا خارج هستش و هم اینکه مخاطب خسته میشه از خوندنش هدف اینه که یه ایده اولیه راجع به این موضوع داده بشه و اگه کسی علاقه داشت به صورت مفصل راجع بهش مطالعه کنه اگه به این فیلد علاقه داری پیشنهاد میکنم کتاب Programming Embedded Systems رو از انتشارات Oreilly مطالعه کن.مطالب رو خیلی جالب با مثال های کاربردی توضیح داده.مزیت دیگه این کتاب اینه که چون میخواد برا سیستم های با منابع حافظه محدود برنامه نویسی کنه یه گریزی به برنامه نویسی با کارکرد بالا هم میزنه که واقعا جذابه :)
حسین گفت :
۱۳۹۹-۰۴-۱۸ ۱۲:۵۲
سپاس.
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله