@: (প্রতীক কোলনে) একটি মেকফিলের অর্থ কী?


155

নিম্নলিখিতটি একটি মেকফিলে কী করে?

rule: $(deps)
    @:

আমি মেক ম্যানুয়ালটিতে এটি খুঁজে পেতে পারি না।

উত্তর:


206

এর অর্থ "আউটপুটটিতে এই আদেশটি প্রতিধ্বনি করবেন না"। সুতরাং এই নিয়মটি বলছে "শেল কমান্ড কার্যকর করুন :এবং আউটপুট প্রতিধ্বনি করবেন না।

অবশ্যই শেল কমান্ডটি :কোনও অপ-বিকল্প নয়, সুতরাং এটি "কিছুই করবেন না এবং বলবেন না" বলছে।

কেন?

এখানে কৌশলটি হ'ল আপনি দুটি পৃথক সিনট্যাক্সের একটি অস্পষ্ট সমন্বয় পেয়েছেন। করতে (1) সিনট্যাক্স @, যা কেবল কমান্ড echo নয় দিয়ে শুরু একটি কর্ম ব্যবহার। সুতরাং একটি নিয়ম

always:
       @echo this always happens

নির্গত হবে না

   echo this always happens
   this always happens

এখন, কোনও নিয়মের ক্রিয়া অংশটি হ'ল যেকোনো শেল কমান্ড হতে পারে :। বাশ সহায়তা এটি পাশাপাশি যে কোনও জায়গায় ব্যাখ্যা করে:

$ help :
:: :
    Null command.

    No effect; the command does nothing.

    Exit Status:
    Always succeeds.

21
আমার টাইপিংয়ে মজা করবেন না, আপনিও একদিন বৃদ্ধ হবেন।
চার্লি মার্টিন

4
এটি যা করে তার এটি একটি দুর্দান্ত ব্যাখ্যা, তবে আপনি কি কোনও সুযোগেই জানেন যে আপনি কোনও মেকফেলে এটি কেন করবেন?
চার্লস কিপ্যাক্স

8
কুয়াশাট নয়
চার্লি মার্টিন 21

2
এটা তোলে ফাইল তৈরী যে বহিরাগত প্রোগ্রাম অনেক কল উপযোগী হতে পারে, এবং যেখানে আপনি ব্যবহার করতে চান তা সুন্দর দেখাচ্ছে মত, করতে অনেক echo এই এক
dwcoder

1
@ চার্লস-কিপ্যাক্স যদি আপনি বিশেষভাবে জিজ্ঞাসা করেন @:(শুধু নয় @) তবে @ গেস্টোলিওর উত্তর ছাড়াও এটি বিকাশ থেকেও একটি বাঁচতে পারে। এটি পাইথনে একটি ফাংশন লেখার মতো যা কেবল থাকে pass। এটি অনুলিপি কোড / পেস্টের জন্য কোডগুলি ব্লক করতে কার্যকর হতে পারে তবে এগুলি সাধারণত দীর্ঘ সময়ের জন্য থাকা উচিত নয়। এইভাবে
স্টিবিং

40

আপনি কেন এটি করতে পারেন সে সম্পর্কে আগ্রহীদের জন্য, আপনি যদি কিছু করার মতো ভান করতে চান তবে এটি কার্যকর so

একটি উদাহরণ হ'ল যদি আপনার কাছে কোনও ফোনি টার্গেট থাকে যা আপনি সর্বদা চালিত করেন এবং এতে আপনার কমান্ডের শর্তাবলীর একটি গুচ্ছ থাকে। এই শর্তগুলি মিথ্যা হয়ে ওঠে এবং কিছু না হয়ে গেলে আপনি কমপক্ষে কিছু পেতে চান।

উদাহরণস্বরূপ (লিনাক্সের স্ক্রিপ্টগুলি / Makefile.clean থেকে):

__clean: $(subdir-ymn)
ifneq ($(strip $(__clean-files)),)
    +$(call cmd,clean)
endif
ifneq ($(strip $(__clean-dirs)),)
    +$(call cmd,cleandir)
endif
ifneq ($(strip $(clean-rule)),)
    +$(clean-rule)
endif
    @:
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.