PDA

View Full Version : دستور make و makefile



mng.n.2008
چهارشنبه 05 بهمن 1390, 12:36 عصر
با سلام به دوستان

من می خوام بدون اینکه از سوییچ -f در ترمینال لینوکس استفاده کنم یک makefile رو make کنم.

مثال:
بجای:
$make -f makefile
بشود:
$make

یعنی makefile موجود در آن ریشه را خودش پیدا کند و MAKE کند

mng.n.2008
یک شنبه 09 بهمن 1390, 14:49 عصر
خودم پاسخ این سوال رو بدست آوردم.
برای این کار لازم است که نام فایل make یکی از حالت های زیر باشد:
makefile
Makefile
البته نام های دیگری هم هستند می توان قرار داد ولی این دو نام مرسوم تر و نام دوم اولویت بیشتری خواهد داشت.

با این کار در کنسول لینوکس با دستور make فایل make در ریشه جاری اجرا خواهد شد.

برای اینکه با ساختار یک فایل make هم دوستان آشنا بشن یک نمونه فایل make را در اینجا قرار داده ام.
پیش از این چند نکته کلیدی را در مورد فایل های make یا makefile می گم.
نکته۱: اساس استفاده از فایل های make اینست که وقتی شما تعداد فایل های برنامه هایتان زیاد شد کامپایل و اجرای آنها سخت خواهد شد. برای اینکه هر بار که تمام فایل های برنامه تان را دوباره کامپایل نکنید (این کار برای برنامه های سنگین و پروژه های بزرگ بسیار طول می کشد)‌ می توانید از یک makefile استفاده کنید. با این کار شما فقط فایل هایی را کامپایل می کنید که تغییر پیدا کرده اند.
نکته۲: هر فایل یک پارامتر به نام timestamp دارد که با بررسی آن برنامه make متوجه خواهد شد که آیا این فایل چه موقع آخرین تغییرات را داشته است و آیا نیاز به ساختن مجدد دارد یا خیر.
نکته۳:‌ مثل تمام برنامه ها و زبان ها نوشتن MAKFILE اصول و قواعد خاص خودش را دارد و معمولاْ فرقی نمی کند که فایل های برنامه تان به چه زبانی است. برنامه های ما در اینجا به زبان CPP خواهد بود.
نکته۴:‌ کامنت ها در Makefile با علامت شارپ (#) تعیین می شوند و تمام یک خط را شامل می شوند.
نکته۵:‌ با استفاده از علامت اسلش (\) تعیین می کنیم که ادامه این خط در خط بعدی خواهد بود.
نکته ۶: دستور زیر بیان می کند که file1 به دو فایل file2 و file3 وابسته است:
file1 : file2 file3
نکته ۷‌:‌ هر چیزی که بعد از دستور بالا قرار می گیرد یک دستور اجرایی خواهد بود که در کنسول اجرا می شود. مثل:
g++ -o main main.cpp
نکته ۸‌:‌ قبل از اینکه دستور بالا را زیر دستور قبلی اش قرار دهید باید به اندازه یک TAB فاصله دهید‌. (این یک قاعده بی دلیل است و معلوم نیست از کجا آمده ولی باید رعایت شود اگرنه برنامه makefile شما به درستی اجرا نخواهد شد)

یک مثل از فایل makefile:

#This is a test makefile
#Written by me

#our files: main.cpp stack.h
#exe is our executable file

#you can do many things cool in a makefile. like including, variable decleration, etc.

exe : main.o
g++ -o exe main.o

main.o : main.cpp stack.h
g++ -c main.cpp

clean:
rm *.o
rm *.o~


مبحث makefile خیلی گسترده است. اگر از دوستان کسی خواست بیشتر بدونه می تونه بپرسه یا درخواست کنه تا در این تاپیک بیشتر به این موضوع بپردازیم.

_hamid
دوشنبه 10 بهمن 1390, 07:09 صبح
ممنون که جوابش رو پیدا کردی اینجا نوشتی. خیلی خوبه این رفتار :)