لوگوی گنو
**ابزارهای خودکار گنو** یا **سیستم ساخت گنو** (به انگلیسی: 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

منابع
-----

1. ↑  "Savannah Git Hosting - autoconf.git/blob - COPYING.EXCEPTION". *Git.savannah.gnu.org*. Archived from the original on 2011-07-21. Retrieved 2016-04-01.
2. ↑  "libtool.git - GNU Libtool". *Git.savannah.gnu.org*. 2005-01-08. Retrieved 2016-04-01.
3. ↑  "The GNU configure and build system - Introduction". *Airs.com*. 1998-07-01. Retrieved 2016-04-01.
4. ↑  "Learning the GNU development tools". *Autotoolset.sourceforge.net*. Retrieved 2016-04-01.
5. ↑  "automake: GNU Build System". *Gnu.org*. 2014-12-31. Retrieved 2016-04-01.
6. ↑  "Cross Compilation with GNU Autotools". Archived from the original on October 13, 2008. Retrieved September 24, 2008.
7. ↑  "Robert Ögren - Slow shell script execution on Cygwin". *Cygwin.com*. Retrieved 2016-04-01.
8. ↑  Kamp, Poul-Henning (2012). "A Generation Lost in the Bazaar". *ACM Queue*. **10** (8).

پیوند به بیرون
--------------

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