এই মেকফিল একটি সংকলক নির্দিষ্ট না করে কীভাবে সি প্রোগ্রাম তৈরি করে?


41

আমি " অ্যাডভান্সড লিনাক্স প্রোগ্রামিং (2001)" [কোড] বইটি থেকে একটি মেকফাইল ব্যবহার করছি । জিএনইউ মেকফাইলে একটি সংকলক এমনকি নির্দিষ্ট করেও কোডটি সঠিকভাবে সংকলন করে দেখে আমার জন্য অবাক লাগছিল। এটি কোনও রেসিপি ছাড়াই বেকিংয়ের মতো!

এটি কোডের একটি সর্বনিম্ন সংস্করণ:

test.c

int main(){}

Makefile নামক

all:            test

এবং সত্যিই কাজ করা! এটি আদেশটি এটি কার্যকর করে:

cc     test.c   -o test

ডকুমেন্টেশনে আমি দরকারী কিছু খুঁজে পাইনি। এটা কীভাবে সম্ভব?


পিএস একটি অতিরিক্ত নোট: এমনকি ভাষা নির্দিষ্ট করা হয়নি; কারণ test.cউপলব্ধ, জিএনইউ makeব্যবহার করে cc। যদি উপস্থিত থাকে test.cppবা test.cc(যখন নেই test.c), এটি ব্যবহার করে g++(এবং না c++)।


4
"এটি কোনও রেসিপি ছাড়াই বেক করার মতো!" একটি রেসিপি আপনাকে জল সিদ্ধ করতে বলবে, তবে গ্যাসের চুলায় প্যান, আনয়ন স্টোভের একটি প্যান, একটি বৈদ্যুতিক কেটলি বা আগুনের উপরে ত্রিপডের উপরে রাখা কড়ির সাহায্যে জল সিদ্ধ করা উচিত কিনা তা নয়। এমনকি আপনার জল কোথায় নিয়ে আসা উচিত তাও বলত না। এটি makeজল ফুটতে বলার মতো এবং এর অভ্যন্তরীণ নিয়মগুলি ব্যবহার করে makeঠিক কীভাবে তা বের করা যাবে;)
রাইময়েড

1
@ রাইময়েড এটি চিৎকার করার মতো: আমি একটি কেক চাই! এবং তারপরে একটি রোবট makeআপনার ফ্রিজ পরীক্ষা করে এবং খুঁজে পাওয়া যায় যে সেখানে কিছু ময়দা পাওয়া যায়, তারপরে এর অভ্যন্তরীণ রেসিপি থেকে আপনার জন্য একটি ডিফল্ট কেক বেক করে। :-)
Ho1

@ হো 1: রোবটটি জিজ্ঞাসা করতে পারে, আপনি কোন কেক স্যার পেতে চান? :): ডি
থিশি

উত্তর:


68

Make এর বিল্ট-ইন বিধিগুলি ব্যবহার করে এটি করে । এগুলি কীভাবে সি কোডটি সংকলন করতে হয় এবং কীভাবে একক-বস্তু প্রোগ্রামগুলি লিঙ্ক করতে হয় তা এটি বলে tell

আপনার এমনকি একটি মেকফিলের প্রয়োজন নেই:

make test

এক ছাড়া কাজ করবে।

এই -pসমস্তগুলি সম্ভব করে এমন লুকানো নিয়মগুলি দেখতে, কোনও মেকফাইল ছাড়াই বিকল্পটি ব্যবহার করুন :

make -p -f /dev/null

আলেফজারো দ্বারা চিহ্নিত হিসাবে , মেকের একটি দীর্ঘ সময়ের জন্য অন্তর্নির্মিত নিয়ম রয়েছে (যদি সর্বদা না হয়); স্টুয়ার্ট ফিল্ডম্যানের ইউনিক্স ভি 7-র প্রথম সংস্করণ এগুলিকে সংজ্ঞায়িত করেছেfiles.c এবং তাঁর 1979 পত্রিকায় সেগুলির উল্লেখ রয়েছে paper এগুলিও পসিক্স স্পেসিফিকেশনের অংশ । (এর অর্থ এই নয় যে মেকের সমস্ত বাস্তবায়নগুলি তাদের সমর্থন করে - ডস জন্য পুরানো বোরল্যান্ড মেক করে না, কমপক্ষে সংস্করণ 3.0 পর্যন্ত না to)



5
@ কিঞ্জোইঙ্গো মেকটি কার্যকরভাবে হরফের ইঞ্জিন: এটির বিধিগুলির একটি সেট রয়েছে (অন্তর্নির্মিত এবং মেকফাইল থেকে), বিদ্যমান শিল্পকর্মগুলি (বর্তমান ডিরেক্টরিতে ফাইলগুলি বা মেকফাইলে নামযুক্ত), এবং অনুরোধ করা শিল্পকর্মগুলি (লক্ষ্যগুলিতে লক্ষ্যগুলি Makefile নামক); এটি অনুরোধকৃত নিদর্শনগুলি পেতে তাদের ব্যবহার করতে পারে কিনা তা নির্ধারণ করার জন্য এটি নিয়ম এবং বিদ্যমান নিদর্শনগুলির সাথে মিলিয়ে দেখার চেষ্টা করে। অন্তর্নির্মিত নিয়মগুলি বলে যে এটি test.cউত্পাদন করতে ব্যবহার করা যেতে পারে testmake -dপ্রক্রিয়াটি আপনাকে বিস্তারিতভাবে দেখিয়ে দেবে ...
স্টিফেন কিট

4
@ হো 1 @ স্টেফেনকিট makeজিএনইউ বা পসিক্স আবিষ্কার হওয়ার অনেক আগে থেকেই এটি ছিল । প্রথম সংস্করণটি প্রায় 40 বছর আগে লেখা হয়েছিল এবং এর আগেও শেল স্ক্রিপ্ট থেকে কিছু প্রোটোটাইপ সংস্করণ নির্মিত হয়েছিল।
আলেফজেরো

3
@ জামেস্কেফ CPPএখনও প্রিপ্রোসেসরকে আহ্বান করে ( cc -Eসাধারণত); সি ++ সংকলক হয় CXX
স্টিফেন কিট

3
CXXএই প্রসঙ্গে @ হো 1 হ'ল মেক ভেরিয়েবল, কমান্ড নয় - একটি মেকফাইলে $(CXX)একটি সি ++ কম্পাইলার চালনার জন্য একটি আদেশ দ্বারা প্রতিস্থাপন করা হবে।
স্টিফেন কিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.