মেকফাইলে ফাইল ফাংশনটি '@' প্রতীক দ্বারা উপসর্গ গ্রহণ করে


10

এই কোড অংশটি জিএনইউ মেকফিল ম্যানুয়ালটির 8.6 অধ্যায় থেকে প্রাপ্ত।

একটি মেকফিলের মধ্যে ফাইল ফাংশনের জন্য @ $ @। এর অর্থ কী? এবং শেল কমান্ডগুলি '@' চিহ্ন দ্বারা উপসর্গ করা rm এর মতো কেন

program: $(OBJECTS)
     $(file >$@.in,$^)
     $(CMD) $(CMDFLAGS) @$@.in
     @rm $@.in

ফাইল ফাংশন সিনট্যাক্স হয়

$(file op filename[,text])
make 

উত্তর:


9

এখানে তিনটি অপ্রাসঙ্গিক ব্যবহার রয়েছে @

ইন $@, অক্ষরটি একটি নিয়মে ব্যবহৃত হতে পারে এমন @একটি স্বয়ংক্রিয় চলকের নাম । সেই পরিবর্তনশীলটির মান হ'ল নিয়ম যে লক্ষ্যটি তৈরি করছে।

যখন @একটি রেসিপি (কমান্ড) লাইনের একেবারে শুরুতে ট্যাব চরিত্রের ঠিক পরে ব্যবহার করা হয়, এটি কার্যকর করার সময় কমান্ডটি মুদ্রণ না করে

চরিত্রটি @অন্য কোথাও বিশেষ নয়।

সুতরাং, আপনার উদাহরণে, নির্মাণের জন্য program:

  1. fileফাংশন প্রার্থনা করা হয়। এটি লক্ষ্যমাত্রার নির্ভরতা ( $^স্বয়ংক্রিয় ভেরিয়েবল) ফাইলটিতে লিখে দেয় program.in
  2. ভেরিয়েবলের মধ্যে যে কোনও কমান্ড সঞ্চিত থাকে CMDতা কার্যকর করা হয়, ভেরিয়েবলের মধ্যে থাকা CMDFLAGSপ্যারামিটারগুলি সহ অতিরিক্ত পরামিতি @program.in। এটি যা করে তা নির্ভর করে কিসের CMDউপর।

  3. কমান্ডটি rm program.inপ্রথমে প্রিন্ট না করেই কার্যকর করা হয়।

কয়েকটি কমান্ড একটি প্যারামিটার দিয়ে শুরু করে @যা একটি ফাইল নির্দেশ করে যা থেকে আরও পরামিতি পড়তে হয়। এটি একটি ডস কনভেনশন যা নিয়ে এসেছিল কারণ কমান্ড লাইনের দৈর্ঘ্যের উপর ডসের একটি কঠোর সীমা ছিল এবং কমান্ড লাইনে কোনও আদেশের আউটপুটকে বিভক্ত করার কোনও উপায় ছিল না। ইউনিক্সের এই সীমাবদ্ধতা নেই বলে ইউনিক্স বিশ্বে এটি অস্বাভাবিক। এই রেসিপিটির প্রভাব সম্ভবত একই রকম

$(CMD) $(CMDFLAGS) $(OBJECTS)

2

@ লাইনের উপসর্গটি লাইনের প্রতিধ্বনিকে দমন করে।

ডিফল্টরূপে এটি কার্যকর করার আগে makeপ্রতিটি লাইন মুদ্রণ করে Makefile। লাইনগুলি যখন শুরু হয় @, তখন এই লাইনগুলি মুদ্রণ করা হবে না।

ছাড়া @:

$ cat > Makefile
hello:                                                                          
    echo hello world
$ make hello
echo hello world
hello world

সহ @:

$ cat > Makefile
hello:                                                                          
    @echo hello world
$ make hello
hello world

একটি নোট যে কেবলমাত্র @লাইনের শুরুতেই প্রতিধ্বনিত প্রতিধ্বনিত করে>$@.inবা @$@.inকেবলমাত্র সাধারণ স্ট্রিংগুলি রয়েছে এবং $@এতে প্রসারিত হবে:

$ cat hello
hello:
    @echo @$@.in
$make hello
@hello.in

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