ابزارهای خودکار گنو

ابزارهای خودکار گنو یا سیستم ساخت گنو (به انگلیسی: GNU Autotools یا GNU Build System)، یک مجموعه از ابزارهای برنامه‌نویسی طراحی شده‌است که برای کمک به ساخت بسته‌های کد منبع قابل حمل برای بسیاری از سیستم‌های شبه یونیکس ایجاد شده‌است. GNU مخفف بازگشتی «GNU's Not Unix» است.

ایجاد یک برنامه نرم‌افزاری قابل حمل می‌تواند دشوار باشد: کامپایلرهای C از سیستمی به سیستمی دیگر متفاوت است. برخی توابع کتابخانه ای خاص در برخی سیستم‌ها وجود ندارند. فایل‌های هدر ممکن است نام‌های متفاوتی داشته باشند. یکی از راه‌های رسیدگی به این مسئله نوشتن کدهای شرطی است، با بلوک‌های کد انتخاب شده توسط دستورالعمل‌های پیش پردازنده (ifdef#) اما این روش به دلیل طیف گسترده‌ای از محیط‌های ساخت به سرعت غیرقابل کنترل می‌شود. ابزارهای خودکار به منظور رسیدگی به این مشکل با مدیریت بیشتر ایجاد شده‌اند.

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

سیستم ساخت گنو، ساخت بسیاری از برنامه‌ها را با استفاده از یک فرایند دو مرحله ای امکان‌پذیر می‌کند: پیکر بندی و سپس ساخت.

اجزاء 

ابزارهای خودکار متشکل از برنامه‌های کاربردی گنو، پیکربندی خودکار، ساخت خودکار و ابزارهای لیب و همچنین ابزارهای مرتبط ای که مرتباً در کنار آنها استفاده می‌شوند شامل برنامهٔ ساخت گنو، gettext گنو، پیکربندی pkg و مجموعه کامپایلرهای گنو که اغلب GCC نیز نامیده می‌شوند.

پیکربندی خودکار گنو 
پیکربندی خودکار یک اسکریپت configure را بر اساس محتویات یک فایل configure.ac که بخش خاصی از بدنهٔ کد منبع را توصیف و مشخص می‌کند، ایجاد می‌کند. اسکریپت configure ، هنگامی که اجرا می‌شود، محیط ساخت را اسکن می‌کند و یک اسکریپت فرعی config.status ایجاد می‌کند، که به نوبه خود، سایر فایل‌های ورودی و معمولاً Makefile.in را به فایل‌های خروجی (Makefile) تبدیل می‌کند که برای آن محیط ساخت، مناسب است. سرانجام برنامه make از Makefile برای تولید برنامه‌های اجرایی از کد منبع استفاده می‌کند.

پیچیدگی ابزارهای خودکار نشان از شرایط گوناگونی دارد که تحت آن ممکن است یک بدنه از کد منبع ساخته شود.
 اگر فایل کد منبع تغییر کرده باشد، دوباره اجرا کردن make که تنها آن بخش‌هایی از بدنهٔ کد منبع را که تغییر روی آن‌ها تأثیر داشته را دوباره کامپایل می‌کند، کفایت می‌کند.
 اگر یک فایل in. تغییر کند آنگاه دوباره اجرا کردن config.status و make کفایت می‌کند.
 اگر بدنهٔ یک کد منبع به کامپیوتر دیگری کپی شود بنابر این کافی است تا configure (که config.status را اجرا می‌کند) و make را دوباره اجرا کنیم.
 اگر بدنهٔ کد منبع به صورت اساسی تغییر کند، آنگاه فایل‌های configure.ac و in. نیاز به تغییر دارند و نیز همهٔ گام‌ها نیز متعاقباً به دنبال می‌آیند.

برای پردازش فایل‌ها، پیکربندی خودکار از پیاده‌سازی گنو از سیستم ماکرو m4 استفاده می‌کنیم.

پیکربندی خودکار دارای چندین برنامه کمکی مانند هدر خودکار، که کمک می‌کند به مدیریت فایل‌های هدر C، اسکن خودکار، که می‌تواند یک فایل ورودی اولیه برای پیکربندی خودکار ایجاد کند و ifnames ، که می‌تواند شناسه‌های پیش پردازنده سی مورد استفاده در برنامه را لیست کند.

ساخت خودکار گنو 
ساخت خودکار به ایجاد Makefileهای قابل حمل کمک می‌کند، که به نوبه خود با ابزار ساخت پردازش می‌شوند. ورودی را به عنوان Makefile.am می‌گیرد و آن را بهMakefile.in تبدیل می‌کند، که توسط پیکربندی اسکریپت برای تولید خروجی فایل Makefile مورد استفاده قرار می‌گیرد. همچنین ردیابی وابستگی را به صورت خودکار را انجام می‌دهد. هر بار که یک فایل منبع کامپایل می‌شود، لیست وابستگی‌ها (به عنوان مثال، فایل‌های هدر C) ثبت می‌شود. بعداً، هر زمانی که ساخت اجرا شد و مشاهده شد که وابستگی ای تغییر کرده‌است، فایل‌های وابسته دوباره ساخته می‌شوند.

ابزارهای لیب گنو 
ابزارهای لیب به مدیریت ایجاد کتابخانه‌های ثابت و پویا در سیستم عامل‌های مختلف شبه یونیکس کمک می‌کند. ابزارهای لیب این را با چکیده سازی فرایند ایجاد کتابخانه، پنهان کردن تفاوت بین سیستم‌های مختلف (مانند سیستم هایگنو/ لینوکس در مقابل سولاریس) بدست آورده‌است.

کتابخانه احتمالات گنو 
Gnulib پروسهٔ ساخت نرم‌افزار ای که از پیکربندی خودکار و ساخت خودکار قابل حمل استفاده می‌کند را برای طیف وسیعی از سیستم‌ها ساده می‌کند.

کاربردها 
ابزارهای خودکار کمک می‌کنند به توسعه دهندگان نرم‌افزار در نوشتن نرم‌افزارهای چندسکویی و آن را در دسترس جامعه کاربران گسترده‌تر ای قرار می‌دهند، از جمله به صورت کد منبع به آن دسته از کاربران که مایل هستند خودشان نرم‌افزار را بسازند. در بیشتر موارد، کاربران به معمولاً اسکریپت configure ارائه شده را اجرا می‌کنند و سپس برنامه make را اجرا می‌کنند. آنها خودشان نیازی به نصب ابزارهای خودکار روی کامپیوتر ندارند.

این می‌تواند هم برای ساخت برنامه‌های بومی روی ماشین ساخت و هم برای کامپایل متقابل با معماری‌های دیگر استفاده شود.

کامپایل متقابل نرم‌افزار برای اجرا روی سرورهای ویندوز از گنو/لینوکس یا سایر سیستم‌های ساخت شبه یونیکس نیز ممکن است. استفاده از MinGW، اگرچه کامپایل بومی معمولاً روی سیستم‌های عامل مطلوب است (مانند خانواده سیستم‌های Microsoft Windows) اسکریپت پوسته بورن نمی‌تواند به تنهایی اجرا شود. این موضوع ایجاد چنین نرم‌افزارهایی را بر روی سیستم عامل‌های ویندوز سخت‌تر از سیستم‌های شبه یونیکس با پوستهٔ بورن که جزء استاندارد است، می‌کند. یک شخص می‌تواند سیستم‌های Cygwin یا MSYS را برو روی ویندوز نصب کند تا لایه سازگاری شبه یونیکس ایجاد کند، این امکان اجرای اسکریپت‌های پیکربندی را فراهم می‌کند. Cygwin همچنین مجموعه کامپایلر گنو، ساخت گنو و سایر نرم‌افزارهایی که سیستم تقریباً کامل شبه یونیکس را در ویندوز فراهم می‌کند را در اختیار قرار می‌دهد. MSYS نیز ساخت گنو و سایر ابزارهای طراحی شده برای کار با MinGW را فراهم می‌کند.

اگرچه انتظار می‌رود توسعه دهنده اسکریپت پیکربندی را برای کاربر نهایی ارائه دهد، اما گاهی اوقات ممکن است کاربر بخواهد اسکریپت پیکربندی را دوباره تولید بکند. انجام چنین کاری ممکن است درصورتی که کاربر بخواهد کد منبع را اصلاح کند، لازم باشد. چنین کاربران نیاز به نصب ابزارهای خودکار دارند، برای استفاده از اجزاء مانند پیکربندی خودکار.

پیکربندی خودکار ایجاد شده configure می‌تواند کند باشد زیرا که برنامه‌هایی مانند کامپایلر C را برای وجود کتابخانه‌های مختلف، فایل‌های هدر و ویژگی‌های زبانی چندین بار اجرا و آزمایش می‌کند. این مسئله به ویژه روی Cygwin اثر دارد که به دلیل عدم فراخوان سیستمی بومی، ممکن است اسکریپت‌های پیکربندی بندی را به شکل قابل توجهی کندتر از لینوکس اجرا کند.

انتقاد 
پل هنینگ کمپ توسعه دهندهٔ سیستم‌های عامل FreeBSD ، در ستون خود برای مجلهٔ ACM ، سیستم‌های ساخت گنو را اینگونه نقد کرد:

کمپ تاریخچه سیستم ساخت را در مسائل قابل حمل ذاتی در بسیاری از انواع یونیکس های ۱۹۸۰ ترسیم می‌کند و نیاز به وجود چنین سیستم‌های ساخت ای را نادیده می‌گیرد.

جستارهای وابسته 

 لیستی از نرم‌افزارهای ساخت خودکار
 ساخت خودکار
 CMake
 استانداردهای Gnits
 کدو نویسی استاندارد در گنو
 waf
 Scnos
 سیستم ساخت Meson
 Qmake

منابع

پیوند به بیرون 
 سیستم پیکربندی و ساخت GNU
 بسته pkg-config
 اسناد خودکار گنو
 مستندات پیکربندی خودکار GNU
 کتابچه راهنمای ترکیبی برای Automake و Autoconf
 آموزش ابزارهای خودکار
 GNU Autoconf , Automake و Libtool 
 Autotools: راهنمای یک پزشک برای Autoconf , Automake و Libtool
 راهنمای ادغام CUDA با ابزارهای خودکار
 Autotools Mythbuster
 معرفی ابزارهای خودکار

ابزارهای برنامه‌نویسی یونیکس
ابزارهای مرتبط با کامپایل کردن
خودکارسازی ساخت
نرم‌افزارهای پروژه گنو
نرم‌افزارهایی که از پروانه جی‌پی‌ال استفاده می‌کنند