در هنگام کار با پروژه‌های متن‌باز یا هنگام نصب نرم‌افزار از سورس، بسیاری از کاربران لینوکس، مدیران سیستم و حتی برنامه‌نویسان تازه‌کار با خطای make: *** [all] Error 2 روبه‌رو می‌شوند. این خطا معمولاً زمانی بروز می‌کند که فرآیند ساخت نرم‌افزار به دلیل مشکل در محیط یا فایل‌های پروژه متوقف شود. به‌طور خلاصه، این خطا می‌تواند ناشی از یکی از دلایل زیر باشد:
  • نبود یا ناقص بودن وابستگی‌ها (Dependencies)
  • خطا در فایل Makefile یا تنظیمات پیکربندی
  • ناسازگاری نسخه کامپایلر یا ابزارهای ساخت
  • سطح دسترسی نادرست یا محدودیت منابع سرور (RAM و Disk)
  • وجود خطاهای سینتکسی در سورس‌کد یا فایل‌های پروژه
در این مقاله از بلاگ وب داده قصد داریم با رویکردی آموزشی و دقیق، تمامی دلایل بروز این خطا و روش‌های رفع آن را بررسی کنیم تا بتوانید فرآیند ساخت نرم‌افزار خود را با موفقیت به پایان برسانید.

آشنایی با خطای make: *** [all] Error 2 و اهمیت رفع آن

در فرآیند کامپایل لینوکس، خطای make: *** [all] Error 2 یکی از رایج‌ترین خطاهایی است که توسعه‌دهندگان و مدیران سرور با آن مواجه می‌شوند. این خطا به‌معنای شکست در فرآیند ساخت (Build) است و معمولاً زمانی رخ می‌دهد که یکی از مراحل کامپایل به‌دلیل خطا در کد، نبود وابستگی یا تنظیم نادرست Makefile با شکست مواجه شده است.
make *** [all] Error 2

درک دقیق پیام خطای make و نحوه تشخیص خطای اصلی

بسیاری از کاربران تنها پیام make: *** [all] Error 2 را می‌بینند و تصور می‌کنند مشکل در خود make است؛ درحالی‌که این خطا تنها نتیجه‌ی یک مشکل دیگر در مراحل قبلی است. برای مثال ممکن است پیش از این خطا، پیام‌هایی از GCC یا G++ درباره‌ی خطای سینتکسی یا فقدان کتابخانه نمایش داده شده باشد.

💡 نکته کلیدی مهم در رفع خطای make Error 2:

برای پیدا کردن خطای واقعی، باید خروجی کامل make را مشاهده کنید. برای این کار می‌توانید از دستور زیر استفاده کنید:
make V=1 2>&1 | less
این دستور باعث می‌شود همه‌ی خروجی‌های make (شامل هشدارها و ارورها) به‌صورت کامل نمایش داده شوند و بتوانید مرحله‌ای که باعث توقف فرآیند شده را بیابید.

✅ هدف این مرحله:

  • تشخیص دقیق ریشه‌ی خطا قبل از پرداختن به پیام نهایی Error 2
  • تمایز بین خطای واقعی (مثلاً از GCC) و خطای نتیجه‌ای (make)

بررسی وابستگی‌ها و ابزارهای کامپایل

یکی از رایج‌ترین علل خطای make: *** [all] Error 2، نصب نبودن ابزارهای پایه‌ی ساخت در سیستم است. در لینوکس، وجود بسته‌هایی مثل build-essential، gcc، make، autoconf و کتابخانه‌های -dev یا -devel ضروری است.

نصب ابزارهای ساخت در توزیع‌های مختلف:

برای رفع خطای make Error 2، ابتدا باید اطمینان حاصل کنید که ابزارهای پایه‌ی کامپایل روی سیستم شما نصب شده‌اند. در لینوکس هر توزیع مجموعه‌ای از پکیج‌های مخصوص به خود دارد که اجرای دستور make را ممکن می‌سازد. نصب صحیح این ابزارها نخستین گام برای جلوگیری از خطاهای ساخت است.
# در Ubuntu/Debian
sudo apt update && sudo apt install build-essential autoconf automake libtool

# در CentOS/RHEL
sudo yum groupinstall "Development Tools"
همچنین اگر پروژه‌ی شما نیاز به پیکربندی دارد (مثلاً با ./configure)، حتماً خروجی آن را با دقت بررسی کنید؛ چرا که در صورت نبود هرگونه وابستگی، هشدارهایی مانند زیر نمایش داده می‌شود:
checking for openssl... no
configure: error: OpenSSL not found
در این حالت، نصب بسته‌ی مربوطه (مثلاً libssl-dev) مشکل را برطرف می‌کند.

بررسی سطح دسترسی و منابع سیستم در فرآیند رفع خطای کامپایل

گاهی اوقات منشأ خطا نه در کد و نه در وابستگی‌ها، بلکه در محدودیت‌های محیطی سیستم است. کمبود منابع سخت‌افزاری (مانند RAM یا فضای دیسک) یا نداشتن سطح دسترسی مناسب توسط کاربر می‌تواند فرآیند کامپایل را متوقف کند. بررسی این دو عامل ساده اما کلیدی، در بسیاری از مواقع اولین گام برای رفع خطای کامپایل به‌ویژه در محیط‌های سروری است.

بررسی دسترسی دایرکتوری پروژه:

در این مرحله باید مطمئن شوید مسیر پروژه و فایل‌های آن برای کاربر قابل نوشتن است. اگر دسترسی‌ها اشتباه تنظیم شده باشند، فرآیند ساخت حتی در صورت کامل بودن وابستگی‌ها نیز با شکست مواجه می‌شود.
ls -ld .
اگر کاربری که make را اجرا می‌کند، مجوز نوشتن در مسیر پروژه نداشته باشد، فرآیند ساخت شکست می‌خورد. برای رفع این موضوع می‌توانید از دستور زیر استفاده کنید:
sudo chown -R $USER:$USER /path/to/project

بررسی حافظه و فضای دیسک:

پیش از هر چیز باید مطمئن شوید سرور یا سیستم شما منابع کافی برای فرآیند ساخت دارد. حافظه ناکافی یا دیسک پر می‌تواند به توقف کامل عملیات کامپایل منجر شود، بنابراین کنترل این بخش یکی از گام‌های حیاتی در رفع خطای کامپایل است.
free -h
df -h
در صورت کمبود RAM یا فضای دیسک، فرآیند کامپایل متوقف می‌شود. در سرورهای ضعیف می‌توانید از سوپرفایل یا swap برای جبران حافظه استفاده کنید.

بررسی و رفع خطاهای Makefile

فایل Makefile مغز فرآیند ساخت نرم‌افزار است. کوچک‌ترین اشتباه در آن می‌تواند باعث خطای make: *** [all] Error 2 شود.

خطاهای متداول در Makefile:

  1. استفاده از فاصله (Space) به‌جای Tab در ابتدای خطوط دستور.
  2. تعریف نادرست مسیرها یا متغیرها.
  3. هدف‌های (Targets) تعریف‌شده که وجود ندارند یا نام اشتباه دارند.
برای اطمینان از صحت سینتکس، می‌توانید از دستور زیر استفاده کنید:
make -n
این دستور فقط دستورات را نمایش می‌دهد بدون آنکه اجرا کند — ابزاری عالی برای شناسایی اشتباهات ساختاری.

اجرای هدف خاص برای تست:

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

دلایل خاص دیگر برای خطای make Error 2

در برخی موارد، دلایل خاص‌تر مانند تنظیمات محیطی یا ناسازگاری نسخه‌ی کامپایلر عامل اصلی خطا هستند.

ناسازگاری نسخه GCC:

اگر پروژه برای نسخه‌ی خاصی از GCC نوشته شده باشد (مثلاً GCC 9)، ممکن است با نسخه‌های جدیدتر مشکل داشته باشد. در این حالت می‌توانید نسخه‌ی خاصی از GCC را نصب کنید:
sudo apt install gcc-9 g++-9
export CC=gcc-9 CXX=g++-9

تنظیمات محیط PATH:

برخی از ابزارها در مسیر PATH سیستم موجود نیستند. با دستور زیر مسیر فعلی را بررسی کنید:
echo $PATH
در صورت نیاز می‌توانید مسیر ابزارها را اضافه کنید:
export PATH=/usr/local/bin:$PATH

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

برای پروژه‌های بزرگ، تحلیل خطا و تکرار فرآیند ساخت می‌تواند زمان‌بر باشد. در ادامه چند نکته برای صرفه‌جویی در زمان آورده شده است:
  1. استفاده از دستور make -j$(nproc) برای افزایش سرعت کامپایل.
  2. پاک‌سازی فایل‌های موقت با make clean قبل از هر بار اجرای مجدد.
  3. بررسی لاگ‌های ساخت در مسیرهایی مثل /var/log/build.log.
  4. استفاده از ابزارهای CI/CD (مثل Jenkins یا GitLab CI) برای تست خودکار Buildها.
کامپایل لینوکس

نمونه عملی: رفع خطای make Error 2 در نصب Nginx از سورس

فرض کنید در هنگام کامپایل Nginx با پیام زیر مواجه می‌شوید:
objs/src/core/nginx.o: No such file or directory
make: *** [objs/Makefile:123: all] Error 2

تحلیل خطا:

در این مثال، مسیر فایل منبع (nginx.o) وجود ندارد یا مجوز دسترسی کافی ندارد.

راه‌حل:

  1. بررسی کنید مسیر فایل درست باشد.
  2. مجوزها را با chmod اصلاح کنید.
  3. سپس مجدداً اجرا کنید:
make clean && ./configure && make && sudo make install
در این حالت معمولاً مشکل رفع می‌شود و Nginx با موفقیت نصب خواهد شد.

نتیجه‌گیری: رفع خطای make: *** [all] Error 2

خطای make: *** [all] Error 2 اگرچه در نگاه اول مبهم به نظر می‌رسد، اما در واقع نشانه‌ی شکست در مرحله‌ای خاص از فرآیند کامپایل است. با بررسی دقیق پیام‌های پیش از آن، نصب صحیح وابستگی‌ها، رفع مشکلات Makefile و کنترل منابع سیستم، می‌توان تقریباً در تمام موارد این خطا را رفع کرد. این مقاله با ارائه رویکردی ساختاریافته، به شما کمک می‌کند تا فرآیند رفع خطای کامپایل در پروژه‌های لینوکسی را به‌صورت حرفه‌ای و اصولی انجام دهید.

سوالات متداول درباره خطای make Error 2

1- آیا خطای make Error 2 به معنای خرابی خود برنامه make است؟

خیر. این خطا تنها نتیجه‌ای از یک مشکل دیگر در فرآیند ساخت است، نه خرابی خود make.

نرسی مزداب
نرسی مزداب

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

مقاله‌ها: 126
پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *