সংক্ষিপ্ত উত্তর: কারণ makeভাল না। এমনকি সি ফ্রন্টে আপনি দেখতে পাচ্ছেন অনেকগুলি বিকল্প পপ আপ।
দীর্ঘ উত্তর: makeকয়েকটি ত্রুটি রয়েছে যা এটি সি সংকলনের জন্য সবে উপযুক্ত করে তোলে এবং জাভা সংকলনের জন্য মোটেই অনুপযুক্ত। আপনি যদি চান তবে এটি জাভা সংকলন করতে বাধ্য করতে পারেন, তবে সমস্যাগুলির মধ্যে ছড়িয়ে পড়া আশা করেন, যার মধ্যে কোনওটির কাছে উপযুক্ত সমাধান বা কর্মপরিকল্পনা নেই। এখানে কয়েকটি দেওয়া হল:
নির্ভরতা রেজোলিউশন
makeঅন্তর্নিহিতভাবে ফাইলগুলি একে অপরের উপর গাছের মতো নির্ভরতার প্রত্যাশা করে, যার মধ্যে একটি ফাইল অন্য কয়েকটি তৈরির ফলাফল। শিরোলেখ ফাইলগুলির সাথে ডিল করার সময় এটি সিটিতে ইতিমধ্যে ব্যাকফায়ার। এর হেডার ফাইলগুলিতে সি ফাইলের নির্ভরতা উপস্থাপনের makeজন্য একটি makeস্পেসিফিক অন্তর্ভুক্ত ফাইলের প্রয়োজন হয় , সুতরাং পরবর্তীটির পরিবর্তনে পূর্বের পুনর্নির্মাণের কারণ হতে পারে। তবে, যেহেতু সি ফাইল নিজেই পুনরায় তৈরি করা হয়নি (নিছক পুনর্নির্মাণ), তাই প্রায়শই লক্ষ্য হিসাবে নির্দিষ্টকরণের প্রয়োজন হয় .PHONY। ভাগ্যক্রমে, জিসিসি স্বয়ংক্রিয়ভাবে এই ফাইলগুলি তৈরি করতে সহায়তা করে।
জাভাতে, নির্ভরতা বৃত্তাকার হতে পারে এবং makeবিন্যাসে শ্রেণি নির্ভরতা স্বয়ংক্রিয়ভাবে উত্পন্ন করার কোনও সরঞ্জাম নেই । antএর Dependকাজ, পরিবর্তে, ক্লাস ফাইলটি সরাসরি পড়তে পারে, এটি কোন শ্রেণিগুলি আমদানি করে তা নির্ধারণ করতে পারে এবং শ্রেণীর ফাইলটি যদি কোনওটির মেয়াদ শেষ হয়ে যায় তবে তা মুছে ফেলতে পারে। এটি ব্যতীত, কোনও তুচ্ছ-নির্ভর নির্ভরতা আপনাকে বারবার পরিষ্কার বিল্ডগুলি ব্যবহার করতে বাধ্য করতে এবং বিল্ড সরঞ্জাম ব্যবহারের কোনও সুবিধা অপসারণ করতে বাধ্য হতে পারে।
ফাইলের নামগুলিতে শূন্যস্থান
জাভা বা সি makeউভয়ই আপনার উত্স কোড ফাইলের নামগুলিতে শূন্যস্থান ব্যবহার করতে উত্সাহিত করে না, যদিও ফাঁকা স্থান ফাইল ফাইলের মধ্যে থাকলেও সমস্যা হতে পারে be উদাহরণস্বরূপ বিবেচনা করুন, যদি আপনার উত্স কোডটি বিদ্যমান থাকে C:\My Documents\My Code\program\src। এটি ভাঙ্গার জন্য যথেষ্ট হবে make। এটি কারণ makeফাইলনামগুলিকে স্ট্রিং হিসাবে বিবেচনা করে। antপাথকে বিশেষ বিষয় হিসাবে বিবেচনা করে।
বিল্ড করার জন্য ফাইল স্ক্যান করা হচ্ছে
makeপ্রতিটি টার্গেটের জন্য কোন ফাইলগুলি তৈরি করতে হবে তা স্পষ্টভাবে সেট করার প্রয়োজন। antউত্স ফাইলগুলির জন্য স্বয়ংক্রিয়-স্ক্যান হওয়া ফোল্ডারটি নির্দিষ্ট করার অনুমতি দেয়। এটি একটি গৌণ সুবিধার মতো মনে হতে পারে তবে জাভাতে প্রতিটি নতুন শ্রেণির জন্য একটি নতুন ফাইলের প্রয়োজন consider প্রকল্পে ফাইল যুক্ত করা একটি বড় ঝামেলা দ্রুত হয়ে উঠতে পারে।
এবং এর সাথে সবচেয়ে বড় সমস্যা make:
মেকটি পসিক্স-নির্ভর
জাভার মূলমন্ত্রটি "একবারে সর্বত্র চালিত করুন" is তবে সেই সংকলনটি পসিক্স-ভিত্তিক সিস্টেমে সীমাবদ্ধ করা, যা জাভা সমর্থনটি আসলে সবচেয়ে খারাপ, উদ্দেশ্যটি নয়।
বিল্ড রুলস makeমূলত ছোট bashস্ক্রিপ্টগুলি। যদিও makeউইন্ডোজের কোনও বন্দর রয়েছে , এটি সঠিকভাবে কাজ করার জন্য, এটির একটি বন্দর দিয়ে বান্ডিল করতে হবে bash, যার মধ্যে ফাইল সিস্টেমের জন্য একটি পসিক্স এমুলেশন স্তর রয়েছে।
এটি দুটি প্রকারভেদে আসে:
MSYS যা POSIX অনুবাদ ফাইল করার পথে সীমাবদ্ধ করার চেষ্টা করে এবং তাই বিশেষত এর জন্য তৈরি না হয়ে বাহ্যিক সরঞ্জামগুলি চালনার সময় অপ্রীতিকর গোটচেগুলি থাকতে পারে।
cygwinযা একটি সম্পূর্ণ POSIX অনুকরণ সরবরাহ করে। ফলস্বরূপ প্রোগ্রামগুলি এখনও সেই ইমুলেশন স্তরের উপর নির্ভর করে।
সেই কারণে, উইন্ডোজে, স্ট্যান্ডার্ড বিল্ড টুলটি মোটেও নয় make, বরং MSBuildএটি একটি এক্সএমএল-ভিত্তিক সরঞ্জামও, নীতিগতভাবে কাছাকাছি ant।
বিপরীতে, antজাভাতে নির্মিত, সর্বত্র চলতে পারে এবং প্ল্যাটফর্ম-স্বতন্ত্র উপায়ে ফাইলগুলি পরিচালনা ও কমান্ড কার্যকর করার জন্য "টাস্ক" নামে আভ্যন্তরীণ সরঞ্জাম রয়েছে। এটি যথেষ্ট বহুমুখী যা ব্যবহারের antচেয়ে আপনি উইন্ডোজে সি প্রোগ্রাম তৈরির পক্ষে সহজতর সময় পেতে পারেন make।
এবং একটি সর্বশেষ নাবালক:
এমনকি সি প্রোগ্রামগুলি স্থানীয়ভাবে মেক ব্যবহার করে না
আপনি প্রথমে এটি লক্ষ্য করতে পারেন না, তবে সি প্রোগ্রামগুলি সাধারণত একটি দিয়ে প্রেরণ করা হয় না Makefile। এগুলি একটি CMakeLists.txt, বা একটি bashকনফিগারেশন স্ক্রিপ্ট সহ প্রেরণ করা হয় যা প্রকৃত উত্পন্ন করে Makefile। বিপরীতে, ব্যবহার করে তৈরি করা জাভা প্রোগ্রামের উত্সটি পূর্ব-অন্তর্নিহিত স্ক্রিপ্টের antসাথে প্রেরণ করা হয় ant। এ Makefileহ'ল অন্য সরঞ্জামগুলির একটি পণ্য - makeএটি তার নিজের একটি বিল্ড টুল হিসাবে কতটা অনুপযুক্ত। antস্বতন্ত্র এবং কোনও অতিরিক্ত প্রয়োজনীয়তা বা নির্ভরতা ছাড়াই আপনার জাভা বিল্ড প্রক্রিয়াটির জন্য আপনার প্রয়োজনীয় সমস্ত কিছু নিয়ে কাজ করে।
আপনি যখন antকোনও প্ল্যাটফর্মে চালান , এটি ঠিক কাজ করে (টিএম)। আপনি এটি সঙ্গে পেতে পারেন না make। এটি অবিশ্বাস্যভাবে প্ল্যাটফর্ম এবং কনফিগারেশন নির্ভর।
make। এবং একটি মেকফাইল যা কেবল একটি সিস্টেমে কাজ করে তা ক্রস প্ল্যাটফর্ম ভাষার পক্ষে খুব সুন্দর নয়।