সঙ্গে:
FILES = $(shell ls)
এর নীচে ইন্টেন্টেড all
, এটি একটি বিল্ড কমান্ড। সুতরাং এটি প্রসারিত হয় $(shell ls)
, তারপরে কমান্ড চালানোর চেষ্টা করে FILES ...
।
যদি FILES
কোনও make
ভেরিয়েবল হিসাবে বিবেচিত হয় , তবে এই ভেরিয়েবলগুলি রেসিপি অংশের বাইরে নির্ধারণ করা দরকার, যেমন:
FILES = $(shell ls)
all:
echo $(FILES)
অবশ্যই, তার মানে তাদের FILES
"থেকে আউটপুট সেট করা হবে ls
" আগে যে কমান্ড .tgz ফাইল তৈরি কোন চলছে। (যদিও কাজ নোট হিসাবে পরিবর্তনশীল প্রতিটি সময় পুনরায় প্রসারণ করা হয়, তাই শেষ পর্যন্ত এটি .tgz ফাইল অন্তর্ভুক্ত করা হবে; কিছু তৈরি করে বৈকল্পিক FILES := ...
এড়াতে হবে, দক্ষতা এবং / বা নির্ভুলতার জন্য। 1 )
যদি FILES
শেল ভেরিয়েবল হিসাবে বিবেচনা করা হয়, আপনি এটি সেট করতে পারেন তবে আপনার শেল-ইজে এগুলি করতে হবে, কোনও ফাঁকা জায়গা ছাড়াই এবং উদ্ধৃত হওয়া:
all:
FILES="$(shell ls)"
তবে, প্রতিটি লাইন একটি পৃথক শেল দ্বারা চালিত হয়, সুতরাং এই পরিবর্তনশীলটি পরবর্তী লাইনে টিকবে না, সুতরাং আপনাকে অবশ্যই এটি অবিলম্বে ব্যবহার করতে হবে:
FILES="$(shell ls)"; echo $$FILES
এটি প্রথমে কিছুটা নিরীহ যেহেতু শেলটি *
আপনার জন্য প্রথমে প্রসারিত হবে (এবং অন্যান্য শেল গ্লোব এক্সপ্রেশন), সুতরাং আপনি ঠিক করতে পারেন:
echo *
আপনার শেল কমান্ড হিসাবে
পরিশেষে, একটি সাধারণ নিয়ম হিসাবে (এই উদাহরণের জন্য সত্যই প্রযোজ্য নয়): মন্তব্যগুলিতে এস্পারেন্টো নোট হিসাবে , আউটপুটটি ব্যবহার করা ls
পুরোপুরি নির্ভরযোগ্য নয় (কিছু বিবরণ ফাইলের নাম এবং কখনও কখনও এমনকি সংস্করণেও নির্ভর করে ls
; ls
আউটপুট স্যানিটাইজ করার প্রয়াসের কিছু সংস্করণ) কিছু ক্ষেত্রে)। সুতরাং, l0b0 এবং আইডিলিক নোট হিসাবে, আপনি যদি জিএনইউ ব্যবহার করছেন তবে আপনাকে নিজের অভ্যন্তরের সমস্ত কিছু ব্যবহার করতে $(wildcard)
এবং তৈরি $(subst ...)
করতে make
(ফাইলের নামে কোনও অদ্ভুত অক্ষর "সমস্যাগুলি এড়ানো) করতে সক্ষম করুন। ( sh
মেকফাইলগুলির রেসিপি অংশ সহ স্ক্রিপ্টগুলিতে, find ... -print0 | xargs -0
ফাঁকা, নতুনলাইনগুলি, নিয়ন্ত্রণের অক্ষরগুলি ইত্যাদির উপর ট্রিপিং এড়ানোর জন্য অন্য একটি পদ্ধতি ব্যবহার করা উচিত))
1 জিএনইউ ডকুমেন্টেশন নোট তৈরি করে আরও জানায় যে ::=
২০১২ সালে পসিক্স অতিরিক্ত কাজ করে । আমি এর জন্য কোনও পসিক্স ডকুমেন্টের তাত্ক্ষণিক রেফারেন্স লিঙ্কটি খুঁজে পাইনি এবং আমি জানি না যে অফ-হ্যান্ড যা make
রূপগুলি সমর্থন করে ::=
, যদিও জিএনইউ আজ তা করে, যেমন :=
অ্যাসাইনমেন্টটি এখনই প্রসারিত করে।
দ্রষ্টব্য যেটি আমি জানি যতদূর জানি সমস্ত আধুনিক জিএনইউ এবং বিএসডি ভেরিয়েন্ট সহ বেশ কয়েকটি বৈকল্পিকগুলিতেও VAR := $(shell command args...)
বানান করা যেতে পারে । এই অন্যান্য রূপগুলি যেমন ব্যবহার না করা হয় তেমনি সংক্ষিপ্ত হওয়া এবং আরও বেশি ভেরিয়েন্টে কাজ করা উভয় ক্ষেত্রেই উন্নত ।VAR != command args...
make
$(shell)
VAR != command args...
ls
সঙ্গেsed
, উদাহরণস্বরূপ কাটা) এবং তারপর rsync এবং অন্যান্য কমান্ড ফলাফল ব্যবহার করুন। আমাকে কি বার বার দীর্ঘ কমান্ডটি পুনরাবৃত্তি করতে হবে? আমি ফলাফলগুলি কোনও অভ্যন্তরীণ মেক ভেরিয়েবলের মধ্যে সঞ্চয় করতে পারি না?