যদি কোনও লক্ষ্য নির্দিষ্ট না করা থাকে তবে "তৈরি" অ্যাপটি কীভাবে তৈরি করতে ডিফল্ট টার্গেট জানতে পারে?


185

বেশিরভাগ লিনাক্স অ্যাপগুলি এর সাথে সংকলিত রয়েছে:

make
make install clean

যেমনটি আমি এটি বুঝতে পেরেছি, মেক আর্গুমেন্ট হিসাবে বিল্ড টার্গেটের নাম নেয় takes সুতরাং installএকটি লক্ষ্য যা কিছু ফাইল অনুলিপি করে এবং তারপরে cleanএকটি লক্ষ্য যা অস্থায়ী ফাইলগুলি সরিয়ে দেয়।

তবে কোন লক্ষ্য নির্ধারণ করা হবে makeযদি কোন যুক্তি নির্দিষ্ট না করা হয় (উদাহরণস্বরূপ আমার উদাহরণের প্রথম কমান্ড)?

উত্তর:


230

ডিফল্টরূপে, এটি প্রথম লক্ষ্য করে একটি দিয়ে শুরু না প্রক্রিয়াকরণের দ্বারা আরম্ভ .ওরফে ডিফল্ট লক্ষ্য ; এটি করতে, এটি অন্যান্য লক্ষ্যগুলি প্রক্রিয়া করতে হতে পারে - বিশেষত, প্রথম লক্ষ্যটির উপর নির্ভর করে।

গনুহ ম্যানুয়াল করুন কভার এই সব উপাদান, এবং একটি আশ্চর্যজনক সহজ এবং তথ্যপূর্ণ পঠিত।


61
প্রথম টার্গেটকে কল allকরা কেবল একটি সম্মেলন।
তোবু

1
আপনি অন্য ব্যবহারকারীর জন্য ইনস্টল করা থাকলে এগুলি পৃথকভাবে চালানো কার্যকর, কারণ আপনাকে কেবল make installসম্পূর্ণ বিল্ড না করে কেবল সুডো চালানো দরকার ।
স্কট ওয়েলস

2
এফওয়াইআই মেকিংয়ের জন্য ডিফল্ট ম্যান এন্ট্রি আপনি কোনও লক্ষ্য নির্দিষ্ট না করে কী হয় তার কোনও উল্লেখ করে না ..
সেকম

2
যদি জিএনইউ ম্যানুয়াল তৈরি করে এই জিনিসগুলি কভার করে, তবে কেন এই প্রশ্ন জিজ্ঞাসা করা হয়েছিল? ম্যানুয়ালটি কীভাবে বিধিগুলি লিখতে হয় তার নথিতে দুর্দান্ত, তবে কীভাবে মেকফিল লিখবেন সে সম্পর্কে কোনও উল্লেখ করা হয়নি।
নিক 16

1
আমি এমন একটি মেক ফাইলে খুঁজছি যা includeঅন্য একটি মেকফিল, যার প্রথম লক্ষ্য %.o : %.cpp। সুতরাং ডিফল্ট লক্ষ্যটি ... সমস্ত .cpp ফাইল তৈরি করা?
কিওয়ারটি

174

অন্যকে কয়েক সেকেন্ড বাঁচাতে এবং ম্যানুয়ালটি পড়া থেকে বাঁচাতে এখানে সংক্ষিপ্ত উত্তরটি দেওয়া হল। এটি আপনার তৈরি ফাইলের শীর্ষে যুক্ত করুন:

.DEFAULT_GOAL := mytarget

"মেক" কার্যকর করা হয় এবং কোনও লক্ষ্য সুনির্দিষ্ট না করা হলে এখন মাইটারেজেটটি লক্ষ্যমাত্রা অনুসারে চালিত হবে is

আপনার যদি মেক (<= 3.80) এর পুরানো সংস্করণ থাকে তবে এটি কাজ করবে না। যদি এটি হয় তবে আনোন উল্লিখিতভাবে আপনি যা করতে পারেন তা কেবল আপনার তৈরি ফাইলের শীর্ষে এটি যুক্ত করুন:

.PHONY: default
default: mytarget ;

তথ্যসূত্র: https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html


1
@ নাথান যদি কোনও পরামিতি ছাড়াই কেউ "মেক" চালায় তবে এটি মাইটারেজকে ডিফল্ট টার্গেট করে।
স্যামুয়েল

1
নোট করুন যে .DIFFAULT_GOAL জিএনইউ v3.80 তৈরিতে সমর্থিত বলে মনে হচ্ছে না, এবং আমি পূর্ববর্তী সংস্করণগুলিও ধরে নেব (v3.81 যদিও এটি সমর্থন করে)। আপনি যদি তৈরির কোনও পুরানো সংস্করণ চালাচ্ছেন তবে আপনাকে নিশ্চিত করতে হবে যে আপনার মেক ফাইলের মধ্যে আপনার ডিফল্ট লক্ষ্যই প্রথম / শীর্ষতম লক্ষ্য।
স্যামুয়েল

4
"... তাদের ম্যানুয়ালটি পড়া থেকে বাঁচাতে" এসও এর অন্যতম বিষয়: এমন প্রশ্নের দ্রুত উত্তর যা প্রাচীন ডকুমেন্টেশনের জন্য খনন করতে কিছুটা সময় নেয়।
ওয়াটসইনাবক্স

1
"এটি আপনার তৈরি ফাইলের শীর্ষে যুক্ত করুন": শীর্ষে যুক্ত করা কোনও প্রয়োজন বলে মনে হয় না।
আমান দীপ গৌতম

2
এটি সঠিক উত্তর হওয়া উচিত। এই ক্ষেত্রে অন্তর্নিহিত জয়ের উপর সুস্পষ্ট।
সায়ন

34

জিএনইউ মেক আপনাকে একটি বিশেষ ভেরিয়েবল নামে ডাকে ডিফল্ট মেক টার্গেট নির্দিষ্ট করার অনুমতি দেয় .DEFAULT_GOAL। এমনকি আপনি এই পরিবর্তনশীলটিকে Makefile এর মাঝখানে আনসেট করতে পারেন, ফলে ফাইলের পরবর্তী লক্ষ্যটি ডিফল্ট লক্ষ্য হয়ে যায়।

রেফ: জিনু ম্যানুয়াল তৈরি করুন - বিশেষ ভেরিয়েবল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.