موضوع مقاله: ابزارهای خودکار گنو | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # ابزارهای خودکار گنو | مقدمه: ایجاد یک برنامه نرم‌افزاری قابل حمل می‌تواند دشوار باشد: کامپایلرهای C از سیستمی به سیستمی دیگر متفاوت است. | ## بخش 1: ابزارهای خودکار گنو | یکی از راه‌های رسیدگی به این مسئله نوشتن کدهای شرطی است، با بلوک‌های کد انتخاب شده توسط دستورالعمل‌های پیش پردازنده (ifdef#) اما این روش به دلیل طیف گسترده‌ای از محیط‌های ساخت به سرعت غیرقابل کنترل می‌شود. ابزارهای خودکار بخشی از زنجیره ابزار گنو هستند و به‌طور گسترده‌ای در بسیاری از نرم‌افزارهای رایگان و بسته‌های منبع آزاد مورد استفاده قرار می‌گیرند. ابزارهای ایجاد کنندهٔ آن نرم‌افزارهای رایگان، تحت پروانه عمومی همگانی با استثنائات خاص مجوز که استفاده از آن را با اختصاصی کردن مالکیت برنامه فراهم کرده‌است، هستند. سیستم ساخت گنو، ساخت بسیاری از برنامه‌ها را با استفاده از یک فرایند دو مرحله ای امکان‌پذیر می‌کند: پیکر بندی و سپس ساخت. پیچیدگی ابزارهای خودکار نشان از شرایط گوناگونی دارد که تحت آن ممکن است یک بدنه از کد منبع ساخته شود. اگر فایل کد منبع تغییر کرده باشد، دوباره اجرا کردن make که تنها آن بخش‌هایی از بدنهٔ کد منبع را که تغییر روی آن‌ها تأثیر داشته را دوباره کامپایل می‌کند، کفایت می‌کند. برای پردازش فایل‌ها، پیکربندی خودکار از پیاده‌سازی گنو از سیستم ماکرو m4 استفاده می‌کنیم. پیکربندی خودکار دارای چندین برنامه کمکی مانند هدر خودکار، که کمک می‌کند به مدیریت فایل‌های هدر C، اسکن خودکار، که می‌تواند یک فایل ورودی اولیه برای پیکربندی خودکار ایجاد کند و ifnames ، که می‌تواند شناسه‌های پیش پردازنده سی مورد استفاده در برنامه را لیست کند. ساخت خودکار گنو ساخت خودکار به ایجاد Makefileهای قابل حمل کمک می‌کند، که به نوبه خود با ابزار ساخت پردازش می‌شوند. | ## بخش 2: ابزارهای خودکار گنو | هر بار که یک فایل منبع کامپایل می‌شود، لیست وابستگی‌ها (به عنوان مثال، فایل‌های هدر C) ثبت می‌شود. بعداً، هر زمانی که ساخت اجرا شد و مشاهده شد که وابستگی ای تغییر کرده‌است، فایل‌های وابسته دوباره ساخته می‌شوند. ابزارهای لیب گنو ابزارهای لیب به مدیریت ایجاد کتابخانه‌های ثابت و پویا در سیستم عامل‌های مختلف شبه یونیکس کمک می‌کند. ابزارهای لیب این را با چکیده سازی فرایند ایجاد کتابخانه، پنهان کردن تفاوت بین سیستم‌های مختلف (مانند سیستم هایگنو/ لینوکس در مقابل سولاریس) بدست آورده‌است. کتابخانه احتمالات گنو Gnulib پروسهٔ ساخت نرم‌افزار ای که از پیکربندی خودکار و ساخت خودکار قابل حمل استفاده می‌کند را برای طیف وسیعی از سیستم‌ها ساده می‌کند. کاربردها ابزارهای خودکار کمک می‌کنند به توسعه دهندگان نرم‌افزار در نوشتن نرم‌افزارهای چندسکویی و آن را در دسترس جامعه کاربران گسترده‌تر ای قرار می‌دهند، از جمله به صورت کد منبع به آن دسته از کاربران که مایل هستند خودشان نرم‌افزار را بسازند. این می‌تواند هم برای ساخت برنامه‌های بومی روی ماشین ساخت و هم برای کامپایل متقابل با معماری‌های دیگر استفاده شود. کامپایل متقابل نرم‌افزار برای اجرا روی سرورهای ویندوز از گنو/لینوکس یا سایر سیستم‌های ساخت شبه یونیکس نیز ممکن است. این موضوع ایجاد چنین نرم‌افزارهایی را بر روی سیستم عامل‌های ویندوز سخت‌تر از سیستم‌های شبه یونیکس با پوستهٔ بورن که جزء استاندارد است، می‌کند. | ## بخش 3: ابزارهای خودکار گنو | یک شخص می‌تواند سیستم‌های Cygwin یا MSYS را برو روی ویندوز نصب کند تا لایه سازگاری شبه یونیکس ایجاد کند، این امکان اجرای اسکریپت‌های پیکربندی را فراهم می‌کند. Cygwin همچنین مجموعه کامپایلر گنو، ساخت گنو و سایر نرم‌افزارهایی که سیستم تقریباً کامل شبه یونیکس را در ویندوز فراهم می‌کند را در اختیار قرار می‌دهد. اگرچه انتظار می‌رود توسعه دهنده اسکریپت پیکربندی را برای کاربر نهایی ارائه دهد، اما گاهی اوقات ممکن است کاربر بخواهد اسکریپت پیکربندی را دوباره تولید بکند. انجام چنین کاری ممکن است درصورتی که کاربر بخواهد کد منبع را اصلاح کند، لازم باشد. چنین کاربران نیاز به نصب ابزارهای خودکار دارند، برای استفاده از اجزاء مانند پیکربندی خودکار. پیکربندی خودکار ایجاد شده configure می‌تواند کند باشد زیرا که برنامه‌هایی مانند کامپایلر C را برای وجود کتابخانه‌های مختلف، فایل‌های هدر و ویژگی‌های زبانی چندین بار اجرا و آزمایش می‌کند. این مسئله به ویژه روی Cygwin اثر دارد که به دلیل عدم فراخوان سیستمی بومی، ممکن است اسکریپت‌های پیکربندی بندی را به شکل قابل توجهی کندتر از لینوکس اجرا کند. | ## جمع‌بندی | انتقاد پل هنینگ کمپ توسعه دهندهٔ سیستم‌های عامل FreeBSD ، در ستون خود برای مجلهٔ ACM ، سیستم‌های ساخت گنو را اینگونه نقد کرد: کمپ تاریخچه سیستم ساخت را در مسائل قابل حمل ذاتی در بسیاری از انواع یونیکس های ۱۹۸۰ ترسیم می‌کند و نیاز به وجود چنین سیستم‌های ساخت ای را نادیده می‌گیرد.