میک فائل میں وائلڈ کارڈز اور فاریچ

Myk Fayl My Wayl Kar Z Awr Farych



ایک فائل ہمیشہ مختلف قسم کے مواد سے بنی ہوتی ہے: چاہے وہ سادہ ٹیکسٹ فائل ہو، پروگرام کوڈ فائل ہو، یا کوئی میک فائل ہو۔ کسی بھی فائل کے مواد کی قسم اسے منفرد بناتی ہے اور اسے فائلوں کے دوسرے فارمیٹ سے ممتاز کرتی ہے۔ بالکل اسی طرح، میک فائل ان قواعد پر مشتمل ہے جو اپنے کام کو صحیح طریقے سے انجام دینے کے لیے مختلف عناصر کا استعمال کرتے ہیں۔ ان عناصر میں سے، وائلڈ کارڈ اور فاریچ ہے جو کچھ منفرد اور اضافی انجام دینے کے لیے درکار ہیں۔ اس گائیڈ کے اندر، ہم وائلڈ کارڈز اور فاریچ کی طاقت پر بات کریں گے جب کہ وہ میک فائل میں استعمال ہوتے ہیں۔

میک فائل میں وائلڈ کارڈز

عام طور پر، وائلڈ کارڈ کو ایک ایسے عنصر کے طور پر جانا جاتا ہے جس کی پیشین گوئی نہیں کی جا سکتی اور یہ صورت حال کو کسی بھی طرح سے بدل سکتا ہے۔ میک فائل میں موجود وائلڈ کارڈز کا استعمال موجودہ ورکنگ ڈائرکٹری سے تمام ممکنہ نمونوں کا پتہ لگانے کے لیے کیا جاتا ہے، چاہے وہ فائل ہو یا کوئی فولڈر۔ یہ سورس فائلیں کسی بھی قسم کی ہو سکتی ہیں۔







میک فائل میں وائلڈ کارڈ استعمال کرنے کے لیے، آپ کو 'وائلڈ کارڈ' کلیدی لفظ استعمال کرنا چاہیے جو ستارے '*' یا '؟' کی پیروی کرتا ہے۔ سائن اور فائل ایکسٹینشن جو ڈاٹ کے ذریعے منسلک ہے۔ آپ '؟' کو بھی استعمال کر سکتے ہیں۔ کسی ایک حرف کو تلاش کرنے کے لیے سائن کریں اور کسی بھی حروف کی تعداد سے ملنے کے لیے '*'۔ اس پورے ڈھانچے کو بریکٹ اور '$' نشان کے اندر استعمال کیا جانا چاہیے۔ مثال کے طور پر، ہم 'SRCS' متغیر کا اعلان کرتے ہیں جو وائلڈ کارڈ کے ذریعے اپنی ویلیو فائل حاصل کرتا ہے۔ یہ وائلڈ کارڈ ان تمام فائلوں کو تلاش کرتا ہے جن کے آخر میں 'cpp' پیٹرن ہوتا ہے۔





میک فائل میں پیش گوئی

میک فائل کا فارچ فنکشن بالکل پروگرامنگ لینگویجز میں فاریچ لوپ کی طرح کام کرتا ہے - فہرست میں موجود آئٹمز پر اعادہ کریں۔ میک فائل میں foreach فنکشن فہرست کے ہر آئٹم پر ایک خاص عمل انجام دیتا ہے۔ یہ عنصر متغیر یا کوئی سورس فائل ہو سکتا ہے۔ مثال کے طور پر، ہم ماخذ متغیر کے ذریعے میک فائل میں foreach فنکشن کے نحو کی وضاحت کرتے ہیں جس میں تین سورس فائلوں کی فہرست ہوتی ہے۔ foreach فنکشن سورس فائلوں کی فہرست کو دہرانے اور انہیں دوسرے 'OBJECTS' متغیر میں محفوظ کرکے تین آبجیکٹ فائلوں کے لیے ایک ہی نام بنانے کے لیے اس سورس متغیر کا استعمال کرتا ہے۔ آخری دو سطریں بتاتی ہیں کہ کس طرح ایک میک فائل رول کو اعادہ کرنے کے بعد ہر C فائل کے لیے ایک آبجیکٹ فائل بنانے کے لیے استعمال کیا جا سکتا ہے۔





ذرائع := file1.c file2.c file3.c
مقاصد := $ ( foreach src،$ ( ذرائع ) ,$ ( src:.c=.o ) )
$OBJECTS : % .O: % .c
$ ( سی سی ) $ ( CFLAGS ) -c $ < -او $ @

مثال 1: وائلڈ کارڈز کا استعمال

وائلڈ کارڈز اور فاریچ فنکشنز کی مثال اور کام کو ظاہر کرنے کے لیے، ہم ایک C++ فائل متعارف کراتے ہیں۔ یہ 'salary.cpp' فائل 'iostream' ہیڈر کے استعمال سے شروع کی گئی ہے تاکہ ان پٹ اور آؤٹ پٹ اسٹریمز کے ہموار استعمال کی اجازت دی جا سکے۔ مرکزی طریقہ رن ٹائم پر ان پٹ ویلیو مانگنے کے لیے عددی قسم کے متغیر 's' اور 'cout' اسٹیٹمنٹ کا اعلان کرتا ہے۔ 'cin' معیاری ان پٹ سٹریم رن ٹائم پر صارف سے قیمت حاصل کرتا ہے اور اسے متغیر 's' میں محفوظ کرتا ہے۔ 'cout' کنسول اسکرین پر صارف کے ذریعہ داخل کردہ قدر کو ظاہر کرتا ہے۔

# شامل کریں
نام کی جگہ کا استعمال کرتے ہوئے std؛
اہم int ( ) {
int s;
cout << 'تنخواہ درج کریں:' ;
کھانا >> s
cout << ' \n تنخواہ:' << s << endl
واپسی 0 ;
}



ہم میک فائل کو 'CXX' متغیر سے شروع کرتے ہیں جو C++ کے کمپائلر کی وضاحت کرتا ہے، اور CXXFLAGS متغیر C++ کمپائلر کے لیے جھنڈے رکھتا ہے۔ ایگزیکیوٹیبل ویری ایبل ایک ایگزیکیوٹیبل 'ہیلو' فائل کا نام رکھتا ہے جو میک فائل کے عمل کے بعد تیار ہوتی ہے۔ SRCS متغیر کسی بھی پیٹرن کو تلاش کرنے کے لیے وائلڈ کارڈ '*' کا استعمال کرتے ہوئے موجودہ ڈائریکٹری سے تمام C++ فائلیں حاصل کرتا ہے جو '.cpp' پر ختم ہوتا ہے۔ OBJS متغیر میں SRCS متغیر کا استعمال کرتے ہوئے تخلیق کی جانے والی آبجیکٹ فائلوں کے نام ہوتے ہیں، 'cpp' ایکسٹینشن کو 'o' سے بدل دیتے ہیں۔ پہلے سے طے شدہ 'تمام' ہدف میک فائل کو بناتا ہے اور یہ قابل عمل متغیر پر منحصر ہے۔

پہلا اصول ہدف 'ہیلو' فائل بناتا ہے جو OBJS متغیر (آبجیکٹ فائلوں کے نام) آبجیکٹ فائل پر منحصر فائل کے ناموں کا استعمال کرتے ہوئے جو 'OBJS' متغیر کے ذریعے تیار ہوتے ہیں۔ دوسرا میک فائل رول '.o' ایکسٹینشن کے ساتھ آبجیکٹ فائل تیار کرتا ہے جو C++ کوڈ فائل کو مرتب کرنے کے بعد C++ فائل پر منحصر ہوتا ہے۔ یہاں، '%' کسی بھی پیٹرن کے فائل نام تلاش کرنے کے لیے ایک وائلڈ کارڈ ہے جو 'cpp' پر ختم ہوتا ہے۔ آخر میں، کلین ٹارگٹ اپنی 'rm' کمانڈ کو '-f' فلیگ کا استعمال کرتے ہوئے ڈائرکٹری سے نئی تخلیق شدہ ایگزیکیوٹیبل اور آبجیکٹ فائلوں کو زبردستی صاف کرنے کے لیے استعمال کرتا ہے۔

CXX = g++
CXXFLAGS = -دیوار -std =c++ گیارہ
قابل عمل = ہیلو
SRCS = $ ( وائلڈ کارڈ * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
تمام: $ ( قابل عمل )
$ ( قابل عمل ) :$ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -او $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -c $ < -او $ @
صاف:
rm -f $ ( قابل عمل ) $ ( OBJS )

'میک' ہدایات کو چلانے پر، ہدف اور آبجیکٹ دونوں فائلیں بنائی گئیں۔ ایگزیکیوٹیبل 'ہیلو' فائل پر عمل کرنے کے بعد، صارف سے تنخواہ درج کرنے کو کہا جاتا ہے اور ہم '67000' کا اضافہ کرتے ہیں۔ آخر میں، تنخواہ واپس ظاہر کی جاتی ہے.

بنانا

مثال 2: Foreach استعمال کرنا

وائلڈ کارڈز استعمال کرنے کے بعد، اب وقت آگیا ہے کہ میک فائل میں فاریچ فنکشن کو استعمال کریں۔ باقی میک فائل کوڈ ایک جیسا ہے۔ لائن 6 پر، ہم ایک اور متغیر شروع کرتے ہیں جو کہ تین قدروں کی فہرست کے ساتھ 'NAMES' ہے - کیٹ، کم، ٹم۔ پہلے سے طے شدہ 'تمام' ہدف کا انحصار قابل عمل متغیر (ٹارگٹ فائل کا نام 'ہیلو') اور پیش گوئی بیان پر ہے۔ 'addprefix' فنکشن 'NAMES' کی فہرست میں ہر نام کے شروع میں 'run_' کا سابقہ ​​لگا کر متحرک طور پر ہدف کے ناموں کو بنانے کے لیے 'NAMES' متغیر کو دہراتا ہے۔

آٹھ لائن کا قاعدہ بتاتا ہے کہ آؤٹ پٹ ایگزیکیوٹیبل ٹارگٹ فائل، یعنی ہیلو، 'OBJS' پر منحصر ہے۔ '-o' پرچم OBJS کا استعمال کرتے ہوئے ہدف آؤٹ پٹ فائل تیار کرتا ہے۔ دسویں لائن کا قاعدہ 'cpp' ایکسٹینشن کے ساتھ سورس فائلوں کا استعمال کرتے ہوئے ٹارگٹ آبجیکٹ فائل تیار کرتا ہے۔ ایسا کرنے کے لیے، '-c' جھنڈا ایک سورس فائل کو مرتب کرنے اور متعلقہ آبجیکٹ فائل بنانے کے لیے استعمال کیا جاتا ہے جو ٹارگٹ جنریشن کے لیے ضروری ہے۔ تیرہویں لائن پر، ہم ایک سابقہ ​​کے طور پر 'رن_' سے شروع ہونے والے مختلف ناموں کے ساتھ آؤٹ پٹ بنانے کے لیے EXECUTABLE متغیر کا استعمال کرتے ہیں۔ آخر میں، کلین ٹارگٹ اور فونی ٹارگٹ آبجیکٹ اور ٹارگٹ فائلوں کو ہٹا کر صاف کر دیں گے۔

CXX = g++
CXXFLAGS = -دیوار -std =c++ گیارہ
# قابل عمل ہدف فائل
قابل عمل = ہیلو
SRCS = $ ( وائلڈ کارڈ * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
# ناموں کی فہرست
نام = کیٹ کم ٹم
#اہداف
تمام: $ ( قابل عمل ) $ ( addprefix run_، $ ( NAMES ) )
$ ( قابل عمل ) :$ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -او $ @ $ ( OBJS )
% .O: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -c $ < -او $ @
# ہر نام کے لیے اہداف بنائیں
رن_ % :$ ( قابل عمل )
. / $ ( قابل عمل ) $*
صاف:
rm -f $ ( قابل عمل ) $ ( OBJS )
# جعلی اہداف
فونی: سب صاف

'میک' انسٹرکشن کا استعمال قابل عمل 'ہیلو' ٹارگٹ تیار کرتا ہے اور ہر اس نام کے لیے پروگرام چلاتا ہے جو 'NAMES' متغیر میں بیان کیا گیا ہے۔

بنانا

آپ 'رن_' کے سابقے کے ساتھ فہرست سے نام کا استعمال کرتے ہوئے اپنے آؤٹ پٹ میں بھی ترمیم کر سکتے ہیں۔

رن_کم بنائیں

نتیجہ

اس گائیڈ نے میک فائل میں وائلڈ کارڈز اور فاریچ تصورات کے استعمال پر بات چیت کی ہے جبکہ ان کے نحو پر الگ سے بحث کی ہے۔ اس کے بعد، ہم نے ایک ہی ایکسٹینشن کے ساتھ فائلوں کو حاصل کرنے اور متغیر فہرست میں اقدار کو دہرانے پر آؤٹ پٹ کے ساتھ ان کے ہر کام کی وضاحت کے لیے کوڈ کی مثالوں پر تبادلہ خیال کیا۔