কখনও কখনও আপনার একটি মেকফিলের প্রয়োজন হয় বিভিন্ন টার্গেট ওএস এর চালাতে সক্ষম হয়ে এবং আপনি যদি বিল্ডটি ব্যর্থ PATH
হওয়ার আগে সম্ভবত কার্যকর দীর্ঘ সময় চালানোর পরিবর্তে প্রয়োজনীয় নির্বাহযোগ্য না হয় তবে তাড়াতাড়ি ব্যর্থ হয়ে যেতে চান ।
ইঞ্জিনিয়ারচুয়ান দ্বারা সরবরাহিত দুর্দান্ত সমাধানের জন্য একটি লক্ষ্য তৈরি করা প্রয়োজন । তবে, যদি আপনার পরীক্ষার জন্য অনেক এক্সিকিউটেবল থাকে এবং আপনার মেকফিলের অনেকগুলি স্বতন্ত্র লক্ষ্যমাত্রা রয়েছে, যার প্রত্যেকটির পরীক্ষার প্রয়োজন হয়, তবে প্রতিটি লক্ষ্যটিকে নির্ভরতা হিসাবে পরীক্ষার লক্ষ্য প্রয়োজন। এটি যখন আপনি একবারে একাধিক লক্ষ্য তৈরি করেন তখন অতিরিক্ত টাইপিংয়ের পাশাপাশি প্রক্রিয়াজাতকরণের সময়ও তৈরি করে।
0xf দ্বারা সরবরাহিত সমাধানটি একটি লক্ষ্য না করে এক্সিকিউটেবলের জন্য পরীক্ষা করতে পারে। পৃথকভাবে বা একসাথে নির্মিত হতে পারে এমন একাধিক লক্ষ্য রয়েছে যখন এটি অনেকগুলি টাইপিং এবং সম্পাদনের সময় সাশ্রয় করে।
পরবর্তী সমাধানে আমার উন্নতি হ'ল which
এক্সিকিউটেবল ( where
উইন্ডোজে) ব্যবহার করার পরিবর্তে, --version
প্রতিটি এক্সিকিউটেবলের মধ্যে একটি বিকল্প থাকার পরিবর্তে সরাসরি জিএনইউ-র ifeq
নির্দেশে নতুন ভেরিয়েবল সংজ্ঞায়নের পরিবর্তে জিএনইউ মেক ব্যবহার করা হয় error
প্রয়োজনীয় নির্বাহযোগ্য না থাকলে বিল্ডটি থামাতে ফাংশন ${PATH}
। উদাহরণস্বরূপ, lzop
এক্সিকিউটেবলের জন্য পরীক্ষা করা :
ifeq (, $(shell which lzop))
$(error "No lzop in $(PATH), consider doing apt-get install lzop")
endif
আপনার যদি চেক করার জন্য বেশ কয়েকটি এক্সিকিউটেবল থাকে তবে আপনি এক্সিকিউটেবলের foreach
সাথে কোনও ফাংশন ব্যবহার করতে চাইতে পারেন which
:
EXECUTABLES = ls dd dudu lxop
K := $(foreach exec,$(EXECUTABLES),\
$(if $(shell which $(exec)),some string,$(error "No $(exec) in PATH")))
:=
আরএইচএস এক্সপ্রেশনটির তাত্ক্ষণিক মূল্যায়ন করার জন্য প্রয়োজনীয় অ্যাসাইনমেন্ট অপারেটরের ব্যবহারটি নোট করুন । যদি আপনার Makefile পরিবর্তন করে PATH
, তবে উপরের শেষ লাইনের পরিবর্তে আপনার প্রয়োজন হবে:
$(if $(shell PATH=$(PATH) which $(exec)),some string,$(error "No $(exec) in PATH")))
এটি আপনাকে অনুরূপ আউটপুট দেয়:
ads$ make
Makefile:5: *** "No dudu in PATH. Stop.