ইংরেজিফরাসিস্প্যানিশ

Ad


অনওয়ার্কস ফেভিকন

makepp_variables - ক্লাউডে অনলাইন

উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটরের মাধ্যমে OnWorks ফ্রি হোস্টিং প্রদানকারীতে makepp_variables চালান

এটি হল makepp_variables কমান্ড যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।

কার্যক্রম:

NAME এর


makepp_variables -- কিভাবে makepp এ ভেরিয়েবল ব্যবহার করবেন

বর্ণনাঃ


?: $*,
$+,
$/,
$<,
$?,
$@,
$^,
=,
!=,
&=,
+=,
:=,
;=,
?=, A: এআর,
আরফলাগস,
এএস, C: সিসি,
CFLAGS,
"পরিবর্তিত_নির্ভরতা",
পরিবর্তিত_ইনপুট,
কুর্দির,
CXX,
CXXFLAGS, D: "নির্ভরতা",
"নির্ভরতা", F: F77,
এফসি,
"প্রতিটির জন্য, প্রত্যেকটির জন্য", I: ইনপুট,
ইনপুট, L: এলডি,
LEX,
লিবটুল, M: বানান,
MAKECMDGOALS,
মেকফ্ল্যাগস,
মেকইনফো,
MAKEPP_DEBUG,
মেকপফ্ল্যাগস,
_মেকেপপফ্ল্যাগস,
MAKEPP_LN_CP,
"makepp_percent_subdirs",
"makepp_require_phony",
makepp_signature_C_flat,
"makepp_simple_concatenation",
MAKEPP_VERSION, O: "আউটপুট",
"আউটপুট", P: পারল,
PWD, R: আরএম,
রুট, S: শেল,
"বাছাই করা_নির্ভরতা",
সাজানো_ইনপুট,
"কান্ড", T: লক্ষ্য,
লক্ষ্যমাত্রা, V: VPATH, Y: YACC

মেকফাইলস সাধারণত অনেক জায়গায় ভেরিয়েবল ব্যবহার করে। ব্যবহারের জন্য একটি গুরুত্বপূর্ণ কারণ
ভেরিয়েবল হল নিশ্চিত করা যে মেকফাইলে শুধুমাত্র একটি জায়গায় তথ্য রয়েছে, তাই
যে এটি পরিবর্তন হলে, তথ্যের দুটি কপি বের হওয়ার কোনো আশঙ্কা নেই
সুসংগত.

পরিবর্তনশীল নামগুলি কেস সংবেদনশীল। তাত্ত্বিকভাবে, পরিবর্তনশীল নাম অনেকগুলি তৈরি করা যেতে পারে
অক্ষর, কিন্তু makepp সম্ভবত এটা grok করতে সক্ষম হবে না যদি আপনি ছাড়া অন্য কিছু করেন
আলফানিউমেরিক অক্ষর, "_", এবং "-"।

প্রতিটি মেকফাইলের নিজস্ব ভেরিয়েবলের সেট রয়েছে এবং একটি মেকফাইলে একটি ভেরিয়েবল সেট করা হবে
অন্য কোনো মেকফাইলে এর মানের উপর কোন প্রভাব নেই। আপনি যদি ভেরিয়েবল সেট করতে চান
অনেকগুলি মেকফাইল, এটি করার সর্বোত্তম উপায় হল তাদের প্রতিটিতে একটি সাধারণ সংজ্ঞা অন্তর্ভুক্ত করা
ফাইল (অন্তর্ভুক্ত বিবৃতি দেখুন) অথবা "গ্লোবাল" ভেরিয়েবল ব্যবহার করুন।

পরিবর্তনশীল কাজ
একটি ভেরিয়েবল বিভিন্ন উপায়ে একটি মান ধরে নিতে পারে:

· একটি পরিবর্তনশীল একটি মেকফাইলের ভিতরে সেট করা যেতে পারে। করার বিভিন্ন উপায় আছে
এই; নিচে দেখ.

একটি ভেরিয়েবলের মান কমান্ড লাইনে নির্দিষ্ট করা যেতে পারে, যেমন:

makepp CFLAGS=-O2 my_program

যদি একাধিক মেকফাইল লোড করা হয়, তবে CFLAGS ভেরিয়েবলটি সমস্তটিতে প্রচার করা হয়
makefiles কমান্ড লাইনে সেট করা ভেরিয়েবল স্বয়ংক্রিয়ভাবে যেকোনো সেটিং ওভাররাইড করে
যে কোনো মেকফাইলে ভেরিয়েবল।

কখনও প্রয়োজন হলে, মেকফাইলকে অবশ্যই স্পষ্টভাবে কমান্ড লাইন সেটিংস ওভাররাইড করতে হবে।
উদ্দেশ্য ব্যবহারকারীর অনুরোধ উপেক্ষা করা নয়, বরং এটি সংশোধন করার একটি উপায়।
"ওভাররাইড" মডিফায়ার যেকোন অ্যাসাইনমেন্ট স্টেটমেন্টের আগে হতে পারে। কিন্তু ক্ষেত্রে
কীওয়ার্ড স্টেটমেন্ট, অর্ডার গুরুত্বপূর্ণ, যে কারণে ওভাররাইড ভেরিয়েন্ট হয়
সর্বদা নীচে দেখানো হয়। "ওভাররাইড" মডিফায়ার শুধুমাত্র যেকোন অ্যাসাইনমেন্টের ক্ষেত্রে প্রযোজ্য যেখানে এটি
বর্তমান, এবং ভেরিয়েবলের পরবর্তী অ্যাসাইনমেন্টকে প্রভাবিত করে না।

· পরিবেশে একটি ভেরিয়েবল সেট করা থাকলে, এটি একটি মেকপ ভেরিয়েবল হিসাবে উল্লেখ করা যেতে পারে।
সাধারণত একটি মেকফাইল ওভাররাইড সেটিংস থেকে ভেরিয়েবলের জন্য অ্যাসাইনমেন্ট
পরিবেশ, কিন্তু আপনি "-e" বা "--environment-overrides" ব্যবহার করে এটি পরিবর্তন করতে পারেন
কমান্ড লাইন অপশন।

ভেরিয়েবলগুলিকে বেশ কয়েকটি অ্যাসাইনমেন্ট এক্সপ্রেশনের মধ্যে একটির সাথে বরাদ্দ করা হয়, যেমন

এক্স = 1
মডিউল := abcd
CC?= gcc
CFLAGS += -ওয়াল
VAR সংজ্ঞায়িত করুন
var লাইন 1
var লাইন 2
enddef
এক্সপোর্ট PATH := $(PWD):$(PATH)
global MYPROJECT.INFO = সমস্ত মেকফাইলে দেখা তথ্য

মানগুলির চারপাশে অগ্রণী এবং পিছনের সাদা স্থান সর্বদা ছিনিয়ে নেওয়া হয়।

বিভিন্ন অ্যাসাইনমেন্ট অপারেটরদের কিছুটা ভিন্ন অর্থ রয়েছে।

সহজ নিয়োগ অপারেটরদের

=
variable = টেক্সট স্ট্রিং
ওভাররাইড VARIABLE = টেক্সট স্ট্রিং

এটি একটি সাধারণ অ্যাসাইনমেন্ট বিবৃতি যা সমস্ত বাস্তবায়ন সমর্থন করে। দ্য
"$(পরিবর্তনশীল)" এর মান না হওয়া পর্যন্ত ডান দিকের অভিব্যক্তিটি মূল্যায়ন করা হয় না
আসলে কোথাও ব্যবহার করা হয়। সুতরাং, আপনি যদি নিম্নলিখিতগুলি করেন:

এক্স = 1
Y = $(X)
এক্স = 2

তারপর "$(Y)" পরে মেকফাইলে "2" এ মূল্যায়ন করবে।

সাধারণভাবে, আপনি সাধারণত "=" এর পরিবর্তে ":=" (নীচে দেখুন) ব্যবহার করতে চান কারণ এটি
আরো অনুমানযোগ্য পরিবর্তনশীল মূল্যায়ন প্রদান করে। যাইহোক, আপনার প্রয়োজন যখন সময় আছে
পরিবর্তনশীল মূল্যায়ন পিছিয়ে দিতে। এছাড়াও, যদি আপনি একটি makefile লিখছেন যে হতে হবে
GNU make ব্যতীত মেকের কিছু সংস্করণের সাথে backward-compatible, তাহলে আপনার কাছে নেই
পছন্দ: আপনি শুধুমাত্র "=" ব্যবহার করতে পারেন।

:=
পরিবর্তনশীল := expr
পরিবর্তনশীল ওভাররাইড করুন := এক্সপ্রেস

এটি "variable = expr" এর মতই যা ডানদিকে মূল্যায়ন করা হয়
অ্যাসাইনমেন্টের সময় একবার এবং সব জন্য। এইভাবে যদি

X := 1
Y := $(X)
X := 2

তারপরে "$(Y)" পরে মেকফাইলে "1" তে মূল্যায়ন করা হবে কারণ এটাই ছিল "$(X)"
যখন "$(Y)" সংজ্ঞায়িত করা হয়েছিল।

;=
পরিবর্তনশীল ;= expr
পরিবর্তনশীলকে ওভাররাইড করুন ;= expr

এটি "পরিবর্তনশীল := expr" এর মতই, ডানদিকের দিকটি মূল্যায়ন করা ছাড়া
শুধুমাত্র প্রথম ব্যবহারের সময় এবং তারপর মনে রাখা. এটি ব্যয়বহুল জন্য দরকারী
কমান্ড, যা সর্বদা একই মান ফেরত দেয়, কিন্তু আপনি কখন সম্পাদন করতে চান না
সম্পর্কহীন লক্ষ্য নির্মাণ:

VAR1 ;= $(পারল ব্যয়বহুল গণনা)
VAR2 ;= $(শেল এক্সটার্নাল কমান্ড)

মনে রাখবেন যে পুরানো মেকফাইলগুলি সাধারণত এখানে ":=" ব্যবহার করবে, অন্তত একবার এটি করতে।
কিন্তু এই অপারেটরের সাথে আপনি এমনকি অতিরিক্তভাবে এটি করতে পারবেন না, যদি আপনি বর্তমানে না করেন
মান প্রয়োজন। বিভিন্ন ডিরেক্টরিতে অভিন্ন মানগুলির জন্য, আপনি করতে পারেন
"গ্লোবাল" এর সাথে এটিকে আরও অপ্টিমাইজ করুন, নীচে আলোচনা করা হয়েছে৷

তবে এটি মূল্যায়নের আদেশ জোরদার করার একটি চতুর উপায় হিসাবে উদ্দেশ্য নয়। যদি একটি
এই মত সংজ্ঞায়িত পরিবর্তনশীল অন্য একটি পরিবর্তনশীল মান অন্তর্ভুক্ত, এবং যে অন্য একটি
একটি লক্ষ্য নির্দিষ্ট মান আছে, এবং প্রথম সম্প্রসারণ সেই লক্ষ্যের জন্য, তারপর
লক্ষ্য নির্দিষ্ট মান অন্যান্য সমস্ত প্রসঙ্গের জন্যও আটকে থাকবে। এটি একটি বাগ এবং
আশা করি ভবিষ্যতে ঠিক করা হবে।

+=
পরিবর্তনশীল += এক্সপ্রেস
variable += expr ওভাররাইড করুন

ভেরিয়েবলের পূর্ববর্তী বিষয়বস্তুতে স্ট্রিং যুক্ত করে, একটি স্থান দ্বারা পৃথক করে। যদি
ভেরিয়েবলটি আগে ":=" দিয়ে বরাদ্দ করা হয়েছিল, তারপর ডানদিকে মূল্যায়ন করা হয়৷
যোগ করার আগে।

&=
পরিবর্তনশীল &= expr
ওভাররাইড পরিবর্তনশীল &= expr

একটি স্পেস দ্বারা পৃথক করা ভেরিয়েবলের পূর্ববর্তী বিষয়বস্তুতে স্ট্রিংটিকে প্রিপেন্ড করে।
যদি ভেরিয়েবলটি পূর্বে ":=" দিয়ে বরাদ্দ করা হয়, তাহলে ডানদিকে থাকে
যোগ করার আগে মূল্যায়ন করা হয়।

উদাহরণস্বরূপ, "CFLAGS" গ্যারান্টি দেওয়ার একটি উপায়, ব্যবহারকারী অন্য যা কিছু রাখুক না কেন,
সর্বদা "-ওয়াল" দিয়ে শুরু হয় এই দুটি লাইন:

CFLAGS = -O2 # সম্ভবত কমান্ড লাইনে ওভাররাইড করা হয়েছে
ওভাররাইড CFLAGS &= -ওয়াল # নিঃশর্তভাবে প্রিপেন্ডেড

পুরানো মেকফাইলগুলিতে আপনাকে সাধারণত এইরকম কিছু করতে হয়েছিল, যার পাশে ছিল
অন্তহীন পুনরাবৃত্তি রোধ করতে ":=" টাইপকে বাধ্য করার প্রভাব:

পরিবর্তনশীল := expr $(পরিবর্তনশীল)

?=
পরিবর্তনশীল? = expr
ওভাররাইড পরিবর্তনশীল?= expr # অকেজো, কিন্তু আইনি

ভেরিয়েবলের মান সেট করে, তবে শুধুমাত্র যদি ভেরিয়েবলটি আগে নির্দিষ্ট করা না থাকে
মেকফাইল, কমান্ড লাইনে বা পরিবেশে। উপরের অ্যাসাইনমেন্ট হল
ঠিক সমতুল্য

ifndef পরিবর্তনশীল
পরিবর্তনশীল = expr
যদি শেষ

!=
পরিবর্তনশীল != শেল কমান্ড
ওভাররাইড variable != শেল কমান্ড

শেল কমান্ড চালায় এবং কমান্ডের আদর্শ আউটপুট ধারণ করার জন্য ভেরিয়েবল সেট করে।
এই ঠিক সমতুল্য

পরিবর্তনশীল := $(শেল কমান্ড)

মাল্টিলাইন ভেরিয়েবল

"সংজ্ঞায়িত করুন" বিবৃতিটি উপরের সরল বিবৃতিগুলির বহুরেখার সমতুল্য। দ্য
চলকের পরে অপারেটর ঐচ্ছিক। অনুপস্থিত থাকলে, এটি "পরিবর্তনশীল সংজ্ঞায়িত করুন" এর সমতুল্য
="। "&=" এবং "+=" অপারেটরগুলি এখানে কিছুটা আলাদা, যাতে তারা এটিকে আঠালো করে
একটি স্থানের পরিবর্তে একটি নতুন লাইন সহ পুরানো মান। ক ব্যতীত কিছু থাকবে না
স্টেটমেন্টের পরে কমেন্ট করুন, অর্থাৎ মান পরবর্তী লাইনে শুরু হয়।

পরিবর্তনশীল সংজ্ঞায়িত করুন :=
ভেরিয়েবলের মানের প্রথম লাইন
ভেরিয়েবলের মানের দ্বিতীয় লাইন
ভেরিয়েবলের মানের তৃতীয় লাইন
endef

ওভাররাইড পরিবর্তনশীল সংজ্ঞায়িত করুন
...
enddef

"সংজ্ঞায়িত" এর আগে কীওয়ার্ডগুলি "রপ্তানি" বা "গ্লোবাল" এবং
"অগ্রাহ্য করা".

আপনার যদি নতুন লাইন ধারণ করার জন্য একটি ভেরিয়েবলের মান প্রয়োজন, তাহলে আপনাকে অবশ্যই "সংজ্ঞায়িত" বিবৃতিটি ব্যবহার করতে হবে
দেখানো হয়েছে (অথবা আপনি পার্লে সরাসরি মান নির্ধারণ করতে পারেন)। ("endef" এর জন্য বেছে নেওয়া হয়েছিল
GNU তৈরির সাথে সামঞ্জস্যপূর্ণ। আপনি "enddef" ব্যবহার করতে পারেন।) এটি প্রাথমিকভাবে এর জন্য দরকারী
"ক্যানড কমান্ড সিকোয়েন্স", যেমন, এরকম কিছু:

COMPILE_C_PROGRAM সংজ্ঞায়িত করুন
@&echo "সংকলন $(ইনপুট)"
@$(CC) $(CFLAGS) $(CPPFLAGS) $(ইনক্লুডস) -c $(ইনপুট) -o $(আউটপুট)
endef

তারপরে আপনি এই মাল্টি-লাইন ভেরিয়েবলটিকে বেশ কয়েকটি নিয়মে ব্যবহার করতে পারেন, যেমন:

%.o : %.c
$(COMPILE_C_PROGRAM)

$(ARCH)/%.o : $(ARCH)/%.c
$(COMPILE_C_PROGRAM)

মনে রাখবেন যে আপনি প্রায়ই একটি নিউলাইনের পরিবর্তে একটি সেমিকোলন ব্যবহার করে একই প্রভাব অর্জন করতে পারেন,
কারণ শেল এটিকে একটি কমান্ড ডিলিমিটার হিসাবেও ব্যাখ্যা করে। উদাহরণ স্বরূপ,

COMPILE_C_PROGRAM = @echo "সংকলন $(ইনপুট)"; \
$(CC) $(CFLAGS) $(CPPFLAGS) $(Includes) -c $(ইনপুট) -o $(আউটপুট)

একই প্রভাব থাকবে, তবে সেমিকোলন পার্লকে শেলের কাছে যেতে বাধ্য করে,
কমান্ডটি সরাসরি এবং আরও দক্ষতার সাথে কার্যকর করার পরিবর্তে। এছাড়াও আপনি প্রতিটি লাগাতে হবে
এটির নিজস্ব একটি লাইনে বিল্টইন, যার অর্থ আপনাকে তে বহিরাগত প্রতিধ্বনিতে স্যুইচ করতে হবে
সেমিকোলন কেস।

"সংজ্ঞায়িত" এর মধ্যে প্রসারিত করার সময় একটি বিশেষত্ব রয়েছে, যেমন "এক্স সংজ্ঞায়িত করুন :=" বা a এর মধ্যে
ভেরিয়েবল যা আগে থেকেই ছিল ":=", "fine X &=" এবং "fine X +="। এই ক্ষেত্রে
"$(শেল কমান্ড ...)" বা বিল্টইন "$(&command ...)" নতুন লাইনে রূপান্তরিত হয় না
স্পেস

এক্সপোর্ট ভেরিয়েবল থেকে সাবপ্রসেস

রপ্তানি VAR...
রপ্তানি VAR = মান
ওভাররাইড এক্সপোর্ট VAR += মান

প্রথম ফর্মটি সাবপ্রসেসে রপ্তানির জন্য প্রদত্ত ভেরিয়েবলগুলিকে চিহ্নিত করে, যে কোনও মান সহ
পরিবর্তনশীল তারপর আছে. দ্বিতীয় ফর্ম, যা অতিরিক্তভাবে শুধুমাত্র একটি পরিবর্তনশীলের ক্ষেত্রে প্রযোজ্য
অবিলম্বে একটি মান নির্ধারণ করে। অ্যাসাইনমেন্টের সমস্ত বৈকল্পিক অনুমোদিত।

ভাগ করা ভেরিয়েবল দিয়ে মেকফাইলস

বিশ্বব্যাপী VAR...
বিশ্বব্যাপী VAR = মান
বিশ্বব্যাপী VAR &= মান ওভাররাইড করুন

প্রথম ফর্মটি সমস্ত মেকফাইলের জন্য প্রদত্ত ভেরিয়েবলকে গ্লোবাল হিসাবে চিহ্নিত করে। যদি তাদের কেউ
ইতিমধ্যে একটি মান ছিল, সেই মানটি মেকফাইল লোকাল ভেরিয়েবল থেকে গ্লোবাল-এ সরানো হয়েছে
এক. যাইহোক, যদি এই বিবৃতিটি দেখা যায়, অন্য কোন মেকফাইলগুলির ইতিমধ্যেই একটি ছিল
তাদের যেকোনোটির জন্য মান, তাহলে সেই মেকফাইলগুলি বিশ্বব্যাপী দেখতে পাবে না।

দ্বিতীয় ফর্ম, যা শুধুমাত্র একটি ভেরিয়েবলের ক্ষেত্রে প্রযোজ্য, উপরন্তু একটি মান অধিকার করে
দূরে অ্যাসাইনমেন্টের সমস্ত বৈকল্পিক অনুমোদিত। মনে রাখবেন ":=" এখনই প্রসারিত হবে৷
স্থানীয় মেকফাইলের মানগুলিতে। বিপরীতে "=" ভেরিয়েবলগুলি প্রসারিত হবে
ব্যবহারের পয়েন্টে মান।

গ্লোবাল ভেরিয়েবলের সাথে মোকাবিলা করা কঠিন হতে পারে, কারণ makepp যেকোনও মেকফাইল লোড করতে পারে
অর্ডার, যেমন কিছু লক্ষ্য তৈরি করার প্রয়োজন দেখা দেয় যার জন্য কোনও নিয়ম বা মেকফাইল লোড করা হয় না।
এই কারণে এটি একটি আছে সুপারিশ করা হয় RootMakeppfile এবং স্পষ্টভাবে সব লোড করতে
অন্য যারা "লোড-মেকফাইল" দিয়ে পরিবর্তনশীল বা পরিবর্তনশীল ব্যবহার করে।

গ্লোবাল GLIBLIBS ;= $(শেল pkg-config --libs glib-2.0)

এছাড়াও মনে রাখবেন যে আপনার প্রকল্পটি একদিন অন্যান্য প্রকল্পের সাথে একসাথে নির্মিত হতে পারে। এই জন্য
কারণ এটি সর্বদা প্রকল্পের নামকে যেকোনো বৈশ্বিক পরিবর্তনশীল নামের অংশ করার পরামর্শ দেওয়া হয়।

লক্ষ্য-নির্দিষ্ট বরাদ্দকরণ

লক্ষ্য: পরিবর্তনশীল = স্ট্রিং
লক্ষ্য: পরিবর্তনশীল := স্ট্রিং
লক্ষ্য: পরিবর্তনশীল += স্ট্রিং ওভাররাইড করুন

ভেরিয়েবলের একটি লক্ষ্য-নির্দিষ্ট মান সেট করে। একটি লক্ষ্য-নির্দিষ্ট মান কার্যকর কেবল
একটি কর্ম যা প্রদত্ত লক্ষ্য উত্পাদন করে. এটি প্রাথমিকভাবে যেমন জিনিসগুলির জন্য ব্যবহৃত হয়
এই:

CFLAGS := -O2

my_prog: file1.o file2.o special_file.o

special_file.o : CFLAGS := -g

%.o: %.c
$(CC) $(CFLAGS)-c $(ইনপুট) -o $(আউটপুট)

এখানে যা ঘটে তা হল যে সমস্ত ".c" ফাইলগুলি অপ্টিমাইজেশানের সাথে কম্পাইল করা হবে ("-O2") ছাড়া
"special_file.c", যা ডিবাগ মোডে কম্পাইল করা হয় ("-g")। এটি একটি সুবিধাজনক উপায়
শুধুমাত্র কয়েকটি ফাইলের জন্য বিভিন্ন সংকলন বিকল্প নির্দিষ্ট করুন।

এই ধরনের লক্ষ্য-নির্দিষ্ট পরিবর্তনশীল অ্যাসাইনমেন্ট শুধুমাত্র নিয়মের কর্মের ক্ষেত্রে প্রযোজ্য; তারা
লক্ষ্য বা নিয়মের নির্ভরতা মূল্যায়ন করার সময় কার্যকর হয় না। যদি একটি নিয়ম
একাধিক টার্গেট আছে, টার্গেট-নির্দিষ্ট পরিবর্তনশীল অ্যাসাইনমেন্ট শুধুমাত্র থেকে নেওয়া হয়
প্রথম লক্ষ্য এছাড়াও মনে রাখবেন যে makepp এর লক্ষ্য-নির্দিষ্ট ভেরিয়েবল সামান্য ভিন্ন
GNU make's থেকে যে তারা শুধুমাত্র উল্লিখিত একটি ফাইলের নিয়মে প্রযোজ্য, এবং না
তার পূর্বসূরীদের যে কোন।

ওয়াইল্ডকার্ড সম্প্রসারণ লক্ষ্যে সঞ্চালিত হয়, তাই আপনি এইরকম কিছু করতে পারেন:

test__*.o : CFLAGS += -DTEST

GNU মেকের সাথে সামঞ্জস্যের জন্য, "*" এর জায়গায় "%" ব্যবহার করা যেতে পারে।

পরিবর্তনশীল প্রতিকল্পন
Makepp এর পরিবর্তনশীল প্রতিস্থাপন নিয়ম অন্যান্য তৈরির মতই, তবে কিছুটা
আরো শক্তিশালী. সমস্ত তৈরির মতো, "$(CC)" বা "${CC}" উভয়ই এর মান উপস্থাপন করে
পরিবর্তনশীল CC। আপনার যদি একটি আক্ষরিক ডলার চিহ্নের প্রয়োজন হয়, একটি ডবল ডলার চিহ্ন ($$) রাখুন, যেমন
এই:

লক্ষ্য: dep1 dep2 dep3 dep4
&rm -f $(আউটপুট)
ফাইলের জন্য $(ইনপুট); do cat $$file >> $(output); সম্পন্ন

অতিরিক্তভাবে makepp-এর একটি "$[পরিবর্তনশীল]" সিনট্যাক্স রয়েছে, যা অন্যটির মতো একই কাজ করে
দুই, কিন্তু makepp অন্য কিছু groks আগে. এটি সম্পূর্ণ নিয়মের জন্য এটি ব্যবহার করার অনুমতি দেয়
এবং/অথবা শর্তাবলী:

bracket_rule = সংজ্ঞায়িত করুন
ifdef SOME_VAR
বন্ধনী:
&echo এটি একটি নিয়ম -o $(আউটপুট)
যদি শেষ
enddef

$[বন্ধনী_নিয়ম]

rc-শৈলী প্রতিকল্পন

ডিফল্টরূপে, makepp rc-শৈলী প্রতিস্থাপন ব্যবহার করে (তথাকথিত কারণ এটি প্রবর্তিত হয়েছিল
আরসি শেল)। এটি একটি উদাহরণ দ্বারা সেরা চিত্রিত করা হয়:

মডিউল = abcd

mylib.a : module_dir/$(MODULES).o $(OTHER_OBJECTS)
$(CXX) $(নির্ভরতা)-ও $(লক্ষ্য)

মডিউলের প্রতিটি শব্দের সাথে "মডিউল_ডির/" উপসর্গটি যুক্ত করা হয়েছে এবং প্রত্যয়টি হল ".o"
প্রতিটি শব্দের সাথে যুক্ত।

আপনি শব্দের তালিকাটি a-তে না রেখেও rc-স্টাইল প্রতিস্থাপন ব্যবহার করতে পারেন
পরিবর্তনশীল সিনট্যাক্স হল "$( word1 word2)"। বন্ধনী এবং এর মধ্যবর্তী স্থানটি লক্ষ্য করুন
প্রথম শব্দ. সুতরাং উপরের উদাহরণটি এভাবে লেখা যেতে পারে:

mylib.a : module_dir/$( abcd).o $(OTHER_OBJECTS)
$(CXX) $(নির্ভরতা)-ও $(লক্ষ্য)

একটি ভেরিয়েবল শুধুমাত্র তখনই rc-স্টাইল প্রতিস্থাপন করবে যখন এতে একাধিক শব্দ থাকবে।
এক কথায় এটি ঐতিহ্যবাহী তৈরির মতো। হায়, যখন চলকটি খালি থাকে, তখন একটি থাকে
সংঘর্ষ প্রথাগত এটিকে খালি স্ট্রিংয়ে প্রসারিত করে। কিন্তু যখন আপনি মনে করেন
এটি একটি তালিকা হিসাবে, আপনি চান "-I$(DIRLIST)" অদৃশ্য হয়ে যাক, নিঃসঙ্গ "-I" দিতে চাইবেন না। দ্য
সমাধান হল এটিকে একটি স্পেস দিয়ে শুরু হওয়া একটি তালিকায় মোড়ানো: "-I$( $(DIRLIST))" আপনাকে দেয়
ঠিক যতগুলো অপশন আছে, যেমন তালিকায় শব্দ আছে।

আপনি যদি একই শব্দে বেশ কয়েকটি ভেরিয়েবল রাখেন যা শব্দের অ্যারেতে প্রসারিত হয়, আরসি-স্টাইল
প্রতিস্থাপন আসলে কার্টেসিয়ান পণ্য নেয়, তাই আপনি যদি এরকম কিছু করতে পারেন
তুমি চাও:

DIRS = s1 s2
মডিউল = abc
প্রত্যয় = .o .c
ফাইল := $(DIRS)/$(মডিউল)$(প্রত্যয়)

এবং FILES স্ট্রিং ধারণ করবে

s1/ao s1/ac s1/bo s1/bc s1/co s1/cc s2/ao s2/ac s2/bo s2/bc s2/co s2/cc

সাদা স্থান ছাড়াও, আরসি-স্টাইল প্রতিস্থাপন যেকোন কোটে, যেকোন বৃত্তাকার, কোঁকড়া বা বর্গক্ষেত্রে থামে
বন্ধনী, এবং ", : ; = # @" এর যেকোনো একটি। মনে রাখবেন যে এই আশ্চর্যজনক হতে পারে, এবং আবার প্রয়োজন
একটি সুস্পষ্ট তালিকা। বলুন আপনি সমস্ত ডিরেক্টরিতে ওয়াইল্ডকার্ড দ্বারা শিরোনাম খুঁজতে চান
একটি বড় হাতের অক্ষর দিয়ে শুরু:

খারাপ := [AZ]*/**/*.$( hpp h) # [AZ]*/**/*.hpp */**/*.h.
ভালো := $( [AZ]*/**/*.)$( hpp h) # [AZ]*/**/*.hpp [AZ]*/**/*.h

যদি RC-শৈলী প্রতিস্থাপন পথে বাধা হয়ে যায়, বা আপনার যদি অগ্রণী বা পিছিয়ে থাকা দরকার
আপনার মেক ভেরিয়েবলে হোয়াইটস্পেস, তারপর আপনি সেট করে আরসি-স্টাইল প্রতিস্থাপন বন্ধ করতে পারেন
ভেরিয়েবল "makepp_simple_concatenation=1"। আপনি কমান্ডে বিশ্বব্যাপী এটি বন্ধ করতে পারেন
লাইন বা পরিবেশ পরিবর্তনশীল হিসাবে। অথবা ভেরিয়েবল সেট করে প্রতি-মেকফাইল ভিত্তিতে
আপনার মেকফাইল। আপনার মেকফাইলের শীর্ষের কাছে এটি করা উচিত, অন্যথায় আপনি প্রবেশ করতে পারেন
মজার পরিস্থিতিতে যেখানে rc-স্টাইল প্রতিস্থাপন কিছু মূল্যায়নের জন্য ব্যবহার করা হয় এবং অন্যদের জন্য নয়।
(অ্যাসাইনমেন্টের আগে মূল্যায়ন করা সমস্ত এক্সপ্রেশন rc-স্টাইল প্রতিস্থাপন ব্যবহার করবে, এবং সমস্ত
অভিব্যক্তির পরে মূল্যায়ন করা হবে না। ১৯৭১ সালে অভিব্যক্তির মূল্যায়নের সময় থেকে
makefiles জটিল এবং সবসময় বিবৃতির ক্রম থেকে স্পষ্ট নয়
makefile, যত তাড়াতাড়ি সম্ভব "makepp_simple_concatenation" সেট করা ভাল।) আপনি করতে পারেন
এমনকি এটি শুধুমাত্র একটি লক্ষ্যের জন্য সেট করুন:

লক্ষ্য: makepp_simple_concatenation = 1
লক্ষ্য:
&echo before_first$(LIST) after_last -o $(output)

কারণ "$[variable]" কে "$(variable)" এর আগে মূল্যায়ন করা হয়, rc- এ দুটিকে একত্রিত করে
প্রতিস্থাপন আপনি আশা করতে পারেন এমন ফলাফল দেবে না, যদি না আপনি এটি একটি স্পষ্টভাবে মোড়ানো
তালিকা:

A = ab
N = 1 2
খারাপ := $(A)$[N]
ভালো := $(A)$($[N])

শেষের লাইনগুলো পড়তে হবে

খারাপ := $(A)1 2 # a1 b1 2
ভালো := $(A)$( 1 2) # a1 a2 b1 b2

প্রতিকল্পন তথ্যসূত্র

একটি প্রতিস্থাপন রেফারেন্সের "$(VAR:A=B)" ফর্ম রয়েছে, যেখানে A হল একটি প্যাটার্ন যা মিলবে এবং B হল
এটি প্রতিস্থাপন করার জন্য একটি প্যাটার্ন। প্রতিস্থাপন রেফারেন্স হল একটি সংক্ষিপ্ত রূপ
"patsubst" ফাংশন। উদাহরণ স্বরূপ:

source_files = ac bc cc dc
অবজেক্ট_ফাইলস = $(সোর্স_ফাইলস:%.c=%.o)

"$(object_files)" কে "ao bo co do" এ সেট করবে। "%" একটি বিশেষ অক্ষর মেলে
কোনো নির্বিচারে স্ট্রিং যদি A এবং B উভয়ই "%" দিয়ে শুরু হয়, প্রতিস্থাপনের সময় একটি সাধারণ ক্ষেত্রে
প্রত্যয়, তারা বাদ দেওয়া যেতে পারে:

অবজেক্ট_ফাইলস = $(source_files:.c=.o)
object_files = $(source_files:c=o) # একই, কারণ। বিশেষ নয়

সাদা ব্যবধান in ভেরিয়েবল

আপনি যদি একটি ভেরিয়েবলে সাদা স্থান নিয়ন্ত্রণ করতে চান তবে আপনাকে অবশ্যই (বর্তমানে) rc-style নিষ্ক্রিয় করতে হবে
প্রতিস্থাপন ("makepp_simple_concatenation=1" সেট করে) এবং তারপর এই মত একটি সিনট্যাক্স ব্যবহার করুন:

null =
T = -o $(শূন্য)

অথবা, একটি খালি মূল্যায়ন সহ:

T = -o $()

যখন আপনি এটি করেন, "T" ভেরিয়েবলটিতে "-o" এর পরে একটি স্পেস থাকে।

হোয়াইটস্পেস পরিচালনা করার জন্য এই ধরনের একটি কৌশল সুপারিশ করা হয় না। আপনি যদি ভেরিয়েবল প্রয়োজন
আপনার মেকফাইলে স্পেস ধারণ করার জন্য, আপনি যা করছেন তা নিয়ে আপনার গুরুত্ব সহকারে চিন্তা করা উচিত।
আপনি যদি স্পেসগুলি পরিচালনা করতে চান তবে সাধারণত আপনার পার্ল কোডে রাখা অনেক ভাল
makefile এর যত্ন নেওয়ার জন্য ("perl_begin" বা "sub" স্টেটমেন্ট ব্যবহার করে), বা এটি পরিচালনা করতে
নিয়মের কর্মে শেল বিবৃতিতে।

এই কেসগুলি সাধারণত উঠে আসে যখন লোকেরা একই নিয়মগুলি ভিন্ন ভিন্ন জন্য ব্যবহার করার চেষ্টা করে
আর্কিটেকচার যা সাধারণ ইউনিক্স কমান্ড সিনট্যাক্স ব্যবহার করে না। যেমন, মাঝে মাঝে কেউ দেখে
মেকফাইলে এইরকম জিনিস:

ifeq ($(ARCH), অদ্ভুত)
O := /OUTPUT=
আর
শূন্য :=
O := -o $(শূন্য)
যদি শেষ

%.o : %.c
$(কম্পাইলার) $(ইনপুট) $(ও)$(আউটপুট)

আপনি যদি সত্যিই চান তবে আপনি makepp দিয়ে এটি করতে পারেন, তবে আপনি সম্ভবত এটি খুঁজে পাবেন যে আপনার
আপনার যদি কম জটিল ভেরিয়েবল থাকে তবে makefiles যথেষ্ট বেশি পাঠযোগ্য
প্রতিস্থাপন, যেমন,

ifeq ($(ARCH), অদ্ভুত)
%.o : %.c
$(WEIRD_COMPILER) $(ইনপুট) /OUTPUT=$(আউটপুট)
আর
%.o : %.c
$(CC) -c $(ইনপুট) -o $(আউটপুট)
যদি শেষ

হোয়াইটস্পেস কখনই পরিবর্তনশীল নামে অনুমোদিত নয়, শুধুমাত্র তাদের মানগুলিতে। এটা আলাদা
কিছু থেকে বাস্তবায়ন করা.

স্বয়ংক্রিয় ভেরিয়েবল
স্বয়ংক্রিয় ভেরিয়েবল হল ভেরিয়েবল যা কোন নিয়মের উপর নির্ভর করে বিভিন্ন মান ধরে নেয়
তাদের মধ্যে মূল্যায়ন করা হয়। Makepp অন্যান্য স্বয়ংক্রিয় ভেরিয়েবলের অধিকাংশ সমর্থন করে
ব্যবহার করার সংস্করণ। উপরন্তু, এটি তাদের বেশিরভাগের জন্য কম রহস্যময়, দীর্ঘ নাম রয়েছে
যে আপনি পরিবর্তে ব্যবহার করতে পারেন. (লেগেসি মেকফাইলগুলির জন্য যা এই নামগুলিকে পুনরায় সংজ্ঞায়িত করতে পারে,
মেকফাইলে সংজ্ঞা ডিফল্ট অর্থকে ওভাররাইড করে। উদাহরণস্বরূপ, যদি আপনি বলেন
আপনার মেকফাইলে "টার্গেট = abc", তারপর "$(target)" সর্বদা "abc" তে প্রসারিত হবে এবং হবে না
আর $@ এর সমতুল্য।)

নিম্নলিখিত সমস্ত স্বয়ংক্রিয় ভেরিয়েবলগুলির একটি সম্পূর্ণ তালিকা যা makepp সমর্থন করে:

আউটপুট
লক্ষ্য
$@ বর্তমান নিয়মের লক্ষ্য। প্রকৃতপক্ষে, যেহেতু makepp একাধিক লক্ষ্য সমর্থন করে
কোন নিয়ম, এই হল প্রথম লক্ষ্য উদাহরণস্বরূপ, নিম্নলিখিত নিয়মে

y.tab.c y.tab.h : parser.y
$(YACC) -o $(আউটপুট) $(YFLAGS) $(ইনপুট)

"$(output)" এর মান থাকবে y.tab.c. যেহেতু এই ম্যাজিক ভেরিয়েবলগুলো আসলে
ফাংশন, আপনি যুক্তি হিসাবে একটি সূচক পাস করতে পারেন। এটি 1 বা পিছনের দিক থেকে গণনা করা হয়
থেকে -1। সুতরাং "$(আউটপুট 2)" বা "$(আউটপুট -1)" এর মান থাকবে y.tab.h.

যদিও এই ভেরিয়েবলের তিনটি ফর্মেরই একই মান রয়েছে, সেখানে একটি পার্থক্য রয়েছে
মাল্টিটার্গেট নিয়মের ব্যাখ্যা। আপনি যদি পুরানো-শৈলীর ক্রিপ্টিক নাম $@ ব্যবহার করেন,
makepp এটিকে আধুনিক নিয়মের পরিবর্তে একটি পুরানো-শৈলীর নিয়ম সেট হিসাবে ব্যাখ্যা করবে
একযোগে সেই সমস্ত লক্ষ্যগুলি তৈরি করে:

ab: # সত্যিই: a এবং b এর জন্য একটি করে নিয়ম
$@ স্পর্শ করুন

cd: # ত্রুটি: mpp অভিযোগ করে যে এটি তৈরি করেনি
স্পর্শ $(আউটপুট)

আউটপুট
লক্ষ্যমাত্রা
বর্তমান নিয়মের সকল লক্ষ্য। "$(টার্গেট)" এর মতই যদি না একাধিক না থাকে
লক্ষ্য উপরের উদাহরণে, "$(outputs)" হবে y.tab.c y.tab.h। আপনি একটি পাস করতে পারেন
ইনডেক্স তালিকা, তাই "$(আউটপুট 2 1)" হবে y.tab.h y.tab.c।

বশ্যতা
ইনপুট
$< নিয়মের প্রথম সুস্পষ্ট নির্ভরতা। উদাহরণস্বরূপ, এই নিয়মে

%.o : %.c
$(CC) $(CFLAGS)-c $(ইনপুট) -o $(আউটপুট)

"$(input)" এর নাম হবে .c ফাইল, যাই হোক না কেন .h ফাইল makepp
আবিষ্কার করে আপনি যদি একাধিক নির্ভরতা নির্দিষ্ট করেন, আপনি একটি পাস করে সেগুলি পেতে পারেন
index: "$(input $(INDEX))" হল INDEXth নির্ভরতা।

নির্ভরতা
ইনপুট
$^ লক্ষ্যের সমস্ত স্পষ্ট নির্ভরতা, অন্তর্ভুক্ত নয় .h দ্বারা আবিষ্কৃত ফাইল
অন্তর্ভুক্ত করার জন্য makepp_scanning.

যেমন নিয়মে

myprog.o : *.o
$(CC) $(CFLAGS) $(ইনপুট) -o $(আউটপুট)

"$(ইনপুট)" ডিরেক্টরির সমস্ত .o ফাইল হবে। আপনি শুধুমাত্র আপনার পছন্দ করতে পারেন
একটি সূচক তালিকা পাস করে চান. আপনি যদি স্পষ্টভাবে বিভিন্ন ধরনের ফাইল উল্লেখ করেন,
আপনি তাদের "$(ইনপুট 2 3 4)" হিসাবে বেছে নিতে পারেন (কিন্তু ওয়াইল্ডকার্ডের সাথে এটি খুব বেশি নয়
প্রতিশ্রুতিশীল)।

সাজানো_নির্ভরতা
সাজানো_ইনপুট
$+ টার্গেটের সমস্ত নির্ভরতা, সাজানো ক্রমে, সদৃশগুলি সরানো হয়েছে।
"$(সর্ট $(ইনপুট))" এর সমতুল্য।

পরিবর্তিত_নির্ভরতা
পরিবর্তিত_ইনপুট
$? লক্ষ্যের নির্ভরতা পরিবর্তিত হয়েছে। এই শুধুমাত্র স্পষ্ট অন্তর্ভুক্ত
নির্ভরতা (অর্থাৎ, আপনি মেকফাইলে যেগুলি তালিকাভুক্ত করেন), অন্তর্নিহিতভাবে আবিষ্কৃত হয় না
স্ক্যানিং থেকে নির্ভরতা (যেমন .h ফাইল)।

এটি সাধারণত এই ধরনের কমান্ডে ব্যবহৃত হয়:

libmine.a : $(মডিউল): build_check ignore_action
$(AR) ru $@ $?

অর্থাত, ar শুধুমাত্র সেই মডিউলগুলিকে প্রতিস্থাপন করতে বলা হয়েছে যা পরিবর্তিত হয়েছে। (দ্রষ্টব্য
"ignore_action" বিল্ড চেক নিয়ম। আপনি যদি এটি নির্দিষ্ট না করেন, তাহলে makepp জোর করবে
যখনই এটি পরিবর্তিত হয় তখনই ক্রিয়া সম্পাদন করতে হবে। কোন নির্ভরতা পরিবর্তিত না হলে,
অ্যাকশন স্ট্রিং হবে "ar ru libmine.a" যা সম্ভবত এটির থেকে আলাদা
শেষবার আপনি এটি চালিয়েছিলেন, তাই "ignore_action" ছাড়া makepp এটি কার্যকর করবে। এই
ক্ষেত্রে, এটি নিরীহ, কিন্তু অন্যান্য কমান্ডের সাথে, এটি একটি সমস্যা হতে পারে। দেখা
makepp_build_check বিশদ বিবরণের জন্য "ignore_action"।)

এই ধরনের সংরক্ষণাগার নির্মাণ একটি ভাল ধারণা নয় কারণ এটি আপনার বিল্ড কম করে দেবে
নির্ভরযোগ্য এর সাথে সমস্যা হল যে আপনি যদি সংরক্ষণাগার তৈরি করেন তবে এর মধ্যে একটি সরিয়ে ফেলুন
মডিউলগুলির তালিকা থেকে মডিউলগুলি, মডিউলগুলি এখনও সংরক্ষণাগারে থাকবে এবং
makepp

কণ্ঠস্বর
$* একটি প্যাটার্ন নিয়মে স্টেম (অর্থাৎ, '%' মিলে যাই হোক না কেন)। বিকল্পভাবে, যদি এই
একটি প্যাটার্ন নিয়ম নয়, এক্সটেনশন ছাড়াই ফাইলের নাম ফেরত দেয় (যেমন, এটি
"$(বেসনাম $(ইনপুট))" এর সমতুল্য।

এটি বেশিরভাগ পিছনের সামঞ্জস্যের জন্য। উদাহরণস্বরূপ, পুরানো সংস্করণে make the
কোন কম্পাইল কিভাবে এটা বলার একমাত্র উপায় .c অনুরূপ মধ্যে ফাইল .o ফাইল মত ছিল
এই:

.co:
$(CC) $(CFLAGS)-c $*.c -o $*.o

এই নিয়ম লিখতে একটি খারাপ উপায়. জিএনইউ-মেক স্টাইল ব্যবহার করা অনেক বেশি পরিষ্কার
প্যাটার্ন নিয়ম, এই মত:

%.o : %.c
$(CC) $(CFLAGS)-c $(ইনপুট) -o $(আউটপুট)

প্রতিটির জন্য
"foreach" ধারা থেকে বর্তমান ফাইলের নাম। "foreach" ধারাগুলি খুব কমই ব্যবহৃত হয়,
কিন্তু তারা সবচেয়ে সাধারণ-উদ্দেশ্য ধরনের প্যাটার্ন নিয়ম যা makepp সমর্থন করে। জন্য
উদাহরণ,

#
# একটি বিশেষ প্রিপ্রসেসর দিয়ে .c ফাইল তৈরি করুন:
#
%.c : %.k
$(প্রিপ্রসেসর) $(ইনপুট) > $(আউটপুট)

#
# .o ফাইলে .c ফাইল কম্পাইল করুন:
#
%.o : %.c
$(CC) $(CFLAGS)-c $(ইনপুট) -o $(আউটপুট)

#
# .c ফাইলগুলির জন্য বিশেষ বিকল্প সংকলন পতাকা যা উদ্ভূত হয়েছে
# .k ফাইল থেকে:
#
$(foreach:%.k=%.o): $(foreach:%.k=%.c): foreach *.k
$(CC) $(SPECIAL_K_FLAGS)-c $(ইনপুট) -o $(আউটপুট)

আরও বিশদ বিবরণ এবং উদাহরণের জন্য নিয়মগুলির foreach ক্লজের ডকুমেন্টেশন দেখুন।

$/ এটি মূলত একটি ধ্রুবক, হয় "/", অথবা নেটিভ উইন্ডোজে "\"। আপনি এটা প্রয়োজন, যদি
আপনি পোর্টেবলভাবে একটি প্রোগ্রাম শুরু করতে চান, যেমন আপনি বর্তমান ডিরেক্টরিতে তৈরি করেছেন:

myoutput:
.$/myprog >$(আউটপুট)

আর্গুমেন্ট হিসাবে পাস করা ফাইলের নামগুলির জন্য এটি এতটা প্রয়োজনীয় নয় কারণ উইন্ডোজ ইউনিক্স পরিচালনা করতে পারে
সেখানে সিনট্যাক্স।

পছন্দ ভেরিয়েবল
আপনি সংশোধন করার জন্য উপরে ব্যাখ্যা করা সমস্ত উপায়ে এগুলি সেট করতে পারেন (অন্যথায় বলা থাকলে)
makepp এর আচরণ ডিফল্টরূপে তারা সব অনির্ধারিত.

MAKEPP_DEBUG
আপনি যদি makepp কল করার আগে এটি একটি সত্য মান সহ রপ্তানি করেন তবে আপনি আরও ডিবাগিং পাবেন
তথ্য এটির অধীনে কার্যকর থাকাকালীন এটি তৈরি করা ফাইলগুলির "RULE_SOURCE"৷
makeppinfo, mppi এবং পরিবর্তনশীল সম্প্রসারণ সম্পর্কে বিশদ বিবরণ এবং নিয়মের অধীনে মিল
makepplog, mppl. এটি আপনাকে দেখাবে যদি মেকপ মেমরি ফুরিয়ে যায় বা হ্যাং হয়ে যায়,
কারণ এটি অবিরামভাবে একই ভেরিয়েবলগুলিকে প্রসারিত করছে:

A = $A # বিলম্বিত মূল্যায়ন, প্রয়োজন :=
B = $C
C = $B

MAKEPP_LN_CP
&ln এর অধীনে নোটটি দেখুন।

makepp_percent_subdirs
লক্ষ্য বা নির্ভরতা মেলে "%" থাকতে এটিকে কিছু সত্য মান (যেমন 1) সেট করুন
একাধিক ডিরেক্টরি জুড়ে।

makepp_require_phony
অন্তর্নিহিত অশ্লীলতা রোধ করতে এটিকে কিছু সত্য মান (যেমন 1) সেট করুন (যেমন যদি একটি নিয়ম
তার লক্ষ্য উৎপাদন ছাড়াই সফল হয়)। এই পরিবর্তনশীল ডিফল্টরূপে সত্য হওয়া উচিত, থেকে
ভাঙ্গা নির্ভরতা শৃঙ্খল রোধ করুন, তবে এটি এর সাথে পশ্চাৎপদ সামঞ্জস্য ভঙ্গ করবে
ঢালু makefiles.

makepp_signature_C_flat
এটি সি স্বাক্ষর করার একটি বিকল্প। এটিকে কিছু সত্য মান (যেমন 1) সেট করুন আপনার চিকিত্সার জন্য
সমতল হিসাবে উত্স, অর্থাৎ সমস্ত নতুন লাইন (প্রিপ্রসেসরের বিবৃতি ব্যতীত)
হোয়াইটস্পেস এবং "#লাইন" নির্দেশাবলী উপেক্ষা করা হয়।

makepp_simple_concatenation
"rc-স্টাইল প্রতিস্থাপন" প্রতিরোধ করতে এটিকে কিছু সত্য মান (যেমন 1) সেট করুন।

PERL
আপনি মেকপ্পে স্ক্রিপ্টগুলি চালানোর জন্য যে পার্ল ব্যবহার করছেন তা আপনি এটিকে সেট করতে পারেন
স্যুট, এবং এটি রপ্তানি করুন। এটি একই পার্ল দিয়ে সাব-স্ক্রিপ্ট চালাতে সাহায্য করতে পারে। এই
বেশিরভাগ পরীক্ষা স্যুট, ইনস্টলেশন এবং পুনরাবৃত্ত বিল্ডের জন্য দরকারী।

VPATH
এই ভেরিয়েবলটিকে কিছু মানের সাথে সেট করাকে অন্তর্নিহিতভাবে "vpath % value" বলা হয়।

পূর্বনির্ধারিত ভেরিয়েবল
Makepp কয়েকটি ভেরিয়েবল পূর্বনির্ধারিত করে, যা আপনি ওভাররাইড করতে পারেন:

AR ডিফল্ট: "আর"।

ARFLAGS
ডিফল্ট: "আরভি"।

AS ডিফল্ট: "যেমন"।

CC ডিফল্ট: "gcc", "egcc", "pgcc", "c89" বা "cc" বা উইন্ডোজের মধ্যে প্রথম পাওয়া গেছে
অতিরিক্তভাবে "cl" বা "bcc32"।

CFLAGS
ডিফল্ট: যদি "$(CC)" একটি GNU কম্পাইলার "-g -Wall" হয়, যদি এটি দুটি উইন্ডোজের একটি হয়
কম্পাইলার কিছুই না, অন্য "-g"।

কুর্দির
বর্তমান মেকফাইলটি যে ডিরেক্টরিতে থাকে।

সিএক্সএক্স ডিফল্ট: "g++", "c++", "pg++", "cxx", "C""C" বা "aCC" বা অনের মধ্যে প্রথম পাওয়া গেছে
উইন্ডোজ অতিরিক্ত "cl" বা "bcc32"।

সিএক্সএক্সফ্ল্যাগস
ডিফল্ট: যদি "$(CXX)" একটি GNU কম্পাইলার "-g -Wall" হয়, যদি এটি দুটি উইন্ডোজের একটি হয়
কম্পাইলার কিছুই না, অন্য "-g"।

F77 ডিফল্ট: "f77", "g77" বা "fort77" এর মধ্যে প্রথম পাওয়া গেছে।

FC ডিফল্ট: "$(F77)"।

LD ডিফল্ট: "ld"।

আইন ডিফল্ট: "লেক্স" বা "ফ্লেক্স" এর মধ্যে প্রথমটি পাওয়া গেছে।

লিবটুল
ডিফল্ট: "libtool"।

সুইচ
এই ভেরিয়েবলের উপস্থিতি বা না থাকার উপর নির্ভর করে দুটি ভিন্ন মান রয়েছে
"--ঐতিহ্যগত-পুনরাবৃত্ত-মেক"। এই ভেরিয়েবলটি কখন ব্যবহার করা হয় এবং মেকপ চিনতে পারে
কিছু বৈশিষ্ট্য বন্ধ করে, এমনকি পুনরাবৃত্তি বাস্তবে সঞ্চালিত হওয়ার আগেই। এটা হতে পারে
অনাকাঙ্ক্ষিত যখন আপনি ধীরে ধীরে এটি মুছে ফেলছেন, তাই প্রথমে কলগুলিকে a তে রূপান্তর করুন
makepp নির্দিষ্ট "$((MAKE))", যা বৈশিষ্ট্যগুলি বন্ধ করবে না। আপনি এটা সেট করা উচিত নয়
কারণ এটি আমাদের স্মার্ট পুনরাবৃত্তির কাজকে ভেঙে দেয়।

MAKECMDGOALS
এই পরিবর্তনশীল সেট করা হয়েছে কিন্তু makepp দ্বারা ব্যবহার করা হয় না। আপনি কিছু করতে এটি জিজ্ঞাসা করতে পারেন শুধুমাত্র যদি
একটি নির্দিষ্ট লক্ষ্য অনুরোধ করা হয়েছিল।

ডিফল্ট: যাই হোক না কেন স্পষ্ট লক্ষ্য ব্যবহারকারী (বা একটি পুনরাবৃত্ত আহ্বান) প্রদান করা হয়েছে.
অস্পষ্টভাবে ডিফল্ট লক্ষ্য তৈরি করার সময় খালি।

ifneq $(ফিল্টার বিশেষ-লক্ষ্য, $(MAKECMDGOALS))
# বিশেষ-লক্ষ্য হল বর্তমান সুস্পষ্ট লক্ষ্যগুলির মধ্যে একটি
অন্য ifeq $(MAKECMDGOALS)
# কোন সুস্পষ্ট লক্ষ্য নেই
যদি শেষ

মেকফ্ল্যাগস (রপ্তানি করা)
স্ট্যান্ডার্ড অপশন যার সাথে মেকপপ বলা হয়েছিল। যাদের একক অক্ষর আছে
ফর্ম একটি অগ্রণী "-" ছাড়াই শুরুতে একত্রিত হয় (স্বর্গ জানে কেন gmake বেছে নিয়েছে
"-" ড্রপ করতে)।

মেকইনফো
ডিফল্ট: "মেকইনফো"।

MAKEPPFLAGS (রপ্তানি করা)
এটি MAKEFLAGS-এর মতো একই মানতে সেট করা হয়েছে, কিন্তু শুধুমাত্র যদি এই ভেরিয়েবলটি উপস্থিত থাকে
makepp এর পরিবেশ।

_MAKEPPFLAGS (রপ্তানি করা)
POSIX/gmake সামঞ্জস্যের জন্য প্রয়োজনীয় makepp নির্দিষ্ট বিকল্প, যার সাথে makepp
বলা হয়. এগুলি একটি পৃথক ভেরিয়েবলের মধ্যে রয়েছে তাই একটি উত্তরাধিকার মেকফাইল ভাঙতে পারে না
MAKEFLAGS আনসেট করে সামঞ্জস্যতা। এই শুধুমাত্র সঙ্গে সেট করা হয়
"--ঐতিহ্যগত-পুনরাবৃত্ত-মেক"।

MAKEPP_VERSION
আপনি যে মেকপপ এর সংস্করণটি চালাচ্ছেন। এটি একটি বিটা সংস্করণ হলে, এটি একটি থাকবে
হাইফেন অনুসরণ করে YYMMDD প্লাস আরও কিছু অভ্যন্তরীণ ডেটা। আপনি "ifdef" এর জন্য এটি ব্যবহার করতে পারেন
অন্যান্য তৈরি থেকে makepp নির্দিষ্ট নির্মাণ লুকাতে.

ডিফল্ট: "makepp --version" দ্বারা প্রদর্শিত একই মান

PWD "CURDIR" এর জন্য একটি উপনাম।

RM ডিফল্ট: "rm -f"। এটি লিগ্যাসি Makefiles জন্য বোঝানো হয়. নতুনদের জন্য বিশেষভাবে ব্যবহার করুন
বিল্টইন &rm কমান্ড সরাসরি। আপনি একটি ভুয়া পরিষ্কার নিয়ম লিখতে চান, দেখুন
পরিবর্তে "makeppclean -r" কমান্ড।

Root- র
আপনার বিল্ড সিস্টেমের রুটের আপেক্ষিক পথ, অর্থাৎ ডিরেক্টরিটি আরও উপরে
যা আপনার কাছে একটি "RootMakeppfile(.mk)" আছে। আপনি একটি না থাকলে, এই পরিবর্তনশীল হয়
খালি।

শেল
আপনি এটি "রপ্তানি" করলেই এই পরিবর্তনশীলটিকে সম্মান করা হবে। সেই ক্ষেত্রে এটি শেল
যা কিছু বিশেষ অক্ষর সহ নট-বিল্টিন ক্রিয়া সম্পাদন করতে ব্যবহৃত হয় (সাদা
সরাসরি কার্যকর করা হচ্ছে)। উইন্ডোজ স্ট্রবেরি বা অ্যাক্টিভস্টেট পার্লে, যদি আপনার থাকে
একটি ইউনিক্স-এর মতো শেল, আপনাকে অবশ্যই আপনার শেল ভেরিয়েবলকে "sh" এ শেষ হওয়া একটি মান সেট করতে হবে
অথবা "sh.exe" আগে কলিং makepp.

ডিফল্ট: "/usr/xpg4/bin/sh" (যেমন সোলারিস) বা "/sbin/xpg4/sh" এর মধ্যে প্রথম পাওয়া গেছে
(যেমন রিলায়েন্ট ইউনিক্স) বা "/ বিন / SH".

YACC
ডিফল্ট: "bison -y" বা "yacc" এর মধ্যে প্রথম পাওয়া যায়।

ভেরিয়েবল এবং পার্ল
পরিবর্তনশীল মানগুলি সাধারণ পার্ল স্কেলার হিসাবে সংরক্ষণ করা হয়, যাতে আপনি সরাসরি তাদের থেকে অ্যাক্সেস করতে পারেন
পার্ল কোড যদি আপনি তাদের সাথে কোন জটিল ম্যানিপুলেশন করতে চান; makepp_extending দেখুন
বিস্তারিত জানার জন্য.

পার্ল থেকে গ্লোবাল ভেরিয়েবল অ্যাক্সেস করা "Mpp::global" এর সাথে উপসর্গ স্থাপন করে অর্জন করা হয়।
প্যাকেজ প্রকৃতপক্ষে কোন পরিবর্তনশীল, বর্তমান মেকফাইলে এখনও উপস্থিত নেই, এবং যা আপনি
এই প্যাকেজে বরাদ্দ করা তখন থেকে বিশ্বব্যাপী হবে, যেন আপনি সবেমাত্র জারি করেছেন
এটির জন্য "গ্লোবাল" বিবৃতি।

এই সরাসরি অ্যাক্সেস যদিও ত্রুটি-প্রবণ! ব্যবহারকারী এই ভেরিয়েবল ওভাররাইড করতে পারে
কমান্ড লাইনে বা পরিবেশের মাধ্যমে। এর আগে আরও কিছু মেকফাইল লোড হয়েছে
একটি পরিবর্তনশীল বৈশ্বিক বা লক্ষ্য নির্দিষ্ট করা হতে পারে. এই ক্ষেত্রে আপনি হবে না
ভেরিয়েবলের মান খুঁজে বের করুন, বা এটি বরাদ্দ করার সময়, এর সম্পত্তি কেড়ে নিতে পারে
(একটি "ওভাররাইড" মডিফায়ারের সমতুল্য, টার্গেট স্পেসিফিকেশন ছাড়া।)

সরাসরি অ্যাক্সেসের সাথে আপনি এই ভেরিয়েবলগুলির সম্প্রসারণকেও বাইপাস করবেন, যদি সেগুলি প্রকারের হয়
"=" বা ";="৷ বিশেষ ভেরিয়েবল যেমন "$(CC)" ফাংশন হিসাবে শুরু হয়, যতক্ষণ না তারা হয়
নির্ধারিত. তাই অনেক ক্ষেত্রে আপনি তাদের মূল্য দেখতে পাবেন না।

এই কারণে makepp কে সঠিক মান নির্ধারণ করতে দেওয়া ভাল। আপনি ব্যবহার করতে পারেন
"makeperl" ভেরিয়েন্ট, যেখানে পার্ল কোড পাওয়ার আগে ভেরিয়েবলটি মূল্যায়ন করা হয়েছে
ব্যাখ্যা করা হয়েছে:

makeperl { $$current_value = '$(MAKEFILE_VAR)' }

আপনার যদি মেকফাইল পার্ল ব্লকে একটি ভেরিয়েবলের প্রয়োজন হয় তবে এটি পার্ল ভেরিয়েবলের মাধ্যমে অর্জন করা হয়
$makefile নিম্নরূপ:

perl { $current_value = $makefile->expand_variable( 'MAKE_VAR' ) }

ফাংশন সবসময় মেকফাইল অবজেক্টকে দ্বিতীয় আর্গুমেন্ট $_[1] হিসাবে পাস করে:

সাব f_f { $current_value = $__[1]->expand_variable( 'MAKE_VAR' ) }

কমান্ডগুলিকে একটি নিয়ম কর্মের মধ্যে বলা হয়, যেখানে মেকফাইল অবজেক্ট রয়েছে
"$Mpp::Subs::rule->{MAKEFILE}" এর মাধ্যমে অ্যাক্সেসযোগ্য:

sub c_cmd { $current_value = $Mpp::Subs::rule->{MAKEFILE}->expand_variable( 'MAKE_VAR' ) }

onworks.net পরিষেবা ব্যবহার করে makepp_variables অনলাইন ব্যবহার করুন


বিনামূল্যে সার্ভার এবং ওয়ার্কস্টেশন

উইন্ডোজ এবং লিনাক্স অ্যাপ ডাউনলোড করুন

  • 1
    খুব ভালোভাবে পরিষ্কার
    খুব ভালোভাবে পরিষ্কার
    একটি কোটলিন স্ক্রিপ্ট যা পরমাণু তৈরি করে
    Gradle/Android প্রকল্প থেকে ক্যাশে।
    Gradle বা IDE আপনাকে অনুমতি দিলে দরকারী
    নিচে স্ক্রিপ্ট পরীক্ষা করা হয়েছে
    macOS, কিন্তু...
    ডিপ-ক্লিন ডাউনলোড করুন
  • 2
    Eclipse Checkstyle প্লাগ-ইন
    Eclipse Checkstyle প্লাগ-ইন
    Eclipse Checkstyle প্লাগ-ইন
    চেকস্টাইল জাভা কোড সংহত করে
    Eclipse IDE এর নিরীক্ষক। দ্য
    প্লাগ-ইন রিয়েল-টাইম ফিডব্যাক প্রদান করে
    লঙ্ঘন সম্পর্কে ব্যবহারকারী...
    Eclipse Checkstyle প্লাগ-ইন ডাউনলোড করুন
  • 3
    AstrOrzPlayer
    AstrOrzPlayer
    AstrOrz Player একটি বিনামূল্যের মিডিয়া প্লেয়ার
    সফ্টওয়্যার, WMP এবং VLC ভিত্তিক অংশ। দ্য
    প্লেয়ার একটি minimalist শৈলী মধ্যে, সঙ্গে
    দশটিরও বেশি থিম রং, এবং এছাড়াও করতে পারেন
    খ ...
    AstrOrzPlayer ডাউনলোড করুন
  • 4
    movistartv
    movistartv
    কোডি মুভিস্টার+ টিভি এক্সবিএমসি-এর জন্য অ্যাডন
    কোডি que পারমিট ডিসপোনার ডি আন
    আইপিটিভি ডি লস সার্ভিসেস ডিকোডিফিকেডর
    মুভিস্টার ইন্টিগ্রেডো এন ইউনো ডি লস
    মিডিয়া সেন্টার মা...
    movistartv ডাউনলোড করুন
  • 5
    কোড :: ব্লক
    কোড :: ব্লক
    কোড::ব্লক একটি বিনামূল্যের, ওপেন সোর্স,
    ক্রস-প্ল্যাটফর্ম C, C++ এবং Fortran IDE
    সবচেয়ে চাহিদাপূর্ণ চাহিদা মেটাতে নির্মিত
    এর ব্যবহারকারীদের। এটা খুব হতে ডিজাইন করা হয়
    প্রসারিত...
    ডাউনলোড কোড::ব্লক
  • 6
    মাঝে
    মাঝে
    মিডস্ট বা অ্যাডভান্সড মাইনক্রাফ্ট ইন্টারফেস
    এবং ডেটা/স্ট্রাকচার ট্র্যাকিং একটি টুল
    একটি Minecraft একটি ওভারভিউ প্রদর্শন
    বিশ্ব, আসলে এটি তৈরি না করেই। এটা
    করতে পারা ...
    এর মধ্যে ডাউনলোড করুন
  • আরও »

লিনাক্স কমান্ডগুলি

Ad