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

Ad


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

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

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

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

কার্যক্রম:

NAME এর


makepp_extending -- কিভাবে পার্ল ব্যবহার করে makepp প্রসারিত করা যায়

বর্ণনাঃ


Makepp অভ্যন্তরীণভাবে যথেষ্ট নমনীয় যাতে পার্ল কোডের সামান্য বিট লিখে আপনি করতে পারেন
ফাংশন যোগ করুন বা অন্যান্য অপারেশন একটি সংখ্যা করুন.

সাধারণ নোট on লেখা পার্ল কোড থেকে কাজ সঙ্গে makepp
প্রতিটি মেকফাইল তার নিজস্ব প্যাকেজে থাকে। এইভাবে একটি মেকফাইলে সংজ্ঞা প্রভাবিত করে না
অন্য মেকফাইলে সংজ্ঞা। সমস্ত স্ট্যান্ডার্ড সহ ফাংশনের একটি সাধারণ সেট
টেক্সচুয়াল ম্যানিপুলেশন ফাংশন প্যাকেজে আমদানি করা হয় যখন এটি তৈরি করা হয়।

মেকফাইল ভেরিয়েবলগুলি সেই প্যাকেজে পার্ল স্কেলার হিসাবে সংরক্ষণ করা হয়। (এর ব্যতিক্রম আছে
এটি: স্বয়ংক্রিয় ভেরিয়েবল এবং CC এর মত ভেরিয়েবলের ডিফল্ট মান আসলে
কোন যুক্তি ছাড়া ফাংশন হিসাবে বাস্তবায়িত. লক্ষ্য নির্দিষ্ট vars, কমান্ড লাইন vars এবং
এনভায়রনমেন্ট ভার্স এইভাবে দেখা যায় না।) এইভাবে আপনার লেখা যেকোন পার্ল কোডের সকলের অ্যাক্সেস আছে
makefile ভেরিয়েবল। গ্লোবাল ভেরিয়েবলগুলি "Mpp::global" প্যাকেজে সংরক্ষণ করা হয়। দেখা
বিস্তারিত জানার জন্য মেকফাইল ভেরিয়েবল।

প্রতিটি বিবৃতি (ifperl/ifmakeperl, perl/makeperl, sub/masub),
ফাংশন (পার্ল / মেকপারল, মানচিত্র / মেকম্যাপ) এবং নিয়ম ক্রিয়া (পার্ল / মেকপারল) এর জন্য
মেকফাইলে সরাসরি পার্ল কোড লেখা দুটি ফ্লেভারে আসে। প্রথমটি একেবারেই
সাধারণ পার্ল, যার অর্থ আপনাকে "f_" উপসর্গটি ব্যবহার করতে হবে যেমনটি পরবর্তী বিভাগে ব্যাখ্যা করা হয়েছে, যদি
আপনি makepp ফাংশন কল করতে চান. দ্বিতীয় বৈকল্পিক প্রথম মাধ্যমে বিবৃতি পাস
মেক-স্টাইল পরিবর্তনশীল সম্প্রসারণ, যার অর্থ আপনি পার্লকে যে "$" দেখতে চান তা দ্বিগুণ করতে হবে।

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

পার্ল কোডে সরাসরি একটি নিয়ম ক্রিয়া হিসাবে বা আপনার সংজ্ঞায়িত একটি কমান্ডের মাধ্যমে চালানো হয়, এটি হল
বিপরীত. "END" ব্লকগুলি চালানো হবে না, তবে বিশ্বব্যাপী ফাইলহ্যান্ডেলগুলি আপনার জন্য ফ্লাশ করা হবে৷ দ্য
গ্লোবাল অবজেক্টের "ডিস্ট্রয়" কখনই চালানো হবে না।

যোগ করার পদ্ধতি নতুন পাঠগত ক্রিয়াকলাপ
আপনি শুধুমাত্র একটি পার্ল সাবরুটিন সংজ্ঞায়িত করে makepp এর সংগ্রহশালায় একটি নতুন ফাংশন যোগ করতে পারেন
একই নাম কিন্তু "f_" এর উপসর্গ সহ। উদাহরণ স্বরূপ:

সাব f_myfunc {
my $argument = &arg; # যুক্তির নাম দাও।
my( undef, $mkfile, $mkfile_line ) = @_; # যুক্তিগুলোর নাম বল।

... এখানে কিছু করুন

ফেরত $return_value;
}

XYZ := $(myfunc my func arguments)

যদি আপনার ফাংশন কোন আর্গুমেন্ট নেয়, কিছু করার নেই. আপনার ফাংশন এক লাগে
argument, উপরের উদাহরণের মতো, এটি পেতে সহজ অ্যাক্সেসর &arg ব্যবহার করুন। আপনি যদি
আরও আর্গুমেন্ট আশা করুন, আপনার আরও জটিল অ্যাক্সেসর প্রয়োজন "আর্গস" নীচে বর্ণিত।

এই অ্যাক্সেসরগুলি একই তিনটি প্যারামিটার প্রক্রিয়া করে যা যেকোনো "f_" এ পাস করা উচিত
ফাংশন, যথা ফাংশন আর্গুমেন্ট, মেকফাইল অবজেক্ট এবং এর জন্য একটি লাইন বর্ণনাকারী
বার্তা তাই আপনি প্রথম ক্ষেত্রে দক্ষ &arg ফর্মটি ব্যবহার করতে পারেন।

&arg অ্যাক্সেসর আপনার জন্য নিম্নলিখিতগুলির যত্ন নেয়: যদি আর্গুমেন্টগুলি আগে থেকেই থাকে৷
প্রসারিত (যেমন "$(my$(function) arg)" এ ফাংশনের নাম খুঁজে বের করার জন্য arg হল
একটি স্ট্রিং হিসাবে পাস এবং শুধু ফিরে. যদি যুক্তিটি এখনও সম্প্রসারণের প্রয়োজন হয়, তবে এটি হল
স্বাভাবিক ক্ষেত্রে, এটি পরিবর্তে একটি স্ট্রিংয়ের একটি রেফারেন্স। &arg অ্যাক্সেসর আপনার জন্য এটি প্রসারিত করে,
যার জন্য এটির 2য় প্যারামিটার হিসাবে makefile অবজেক্ট প্রয়োজন।

আপনি যদি আরও আর্গুমেন্ট আশা করেন, সম্ভবত পরিবর্তনশীল সংখ্যায়, কাজটি "আর্গস" দ্বারা সঞ্চালিত হয়।
এই অ্যাক্সেসরটি arg হিসাবে একই 3 প্যারামিটার নেয়, এবং অতিরিক্ত পরামিতি:

সর্বোচ্চ: আর্গের সংখ্যা (ডিফল্ট 2): অফুরন্তের জন্য ~0 (ম্যাক্সিন্ট) দিন
ন্যূনতম: আর্গের সংখ্যা (ডিফল্ট 0 যদি সর্বোচ্চ ~0 হয়, অন্যথায় সর্বাধিকের মতো)
only_comma: কমার চারপাশে স্থান খাবেন না, নন-ফাইলনামের জন্য স্বাভাবিক

সর্বাধিক সর্বাধিক, তবে বিস্তৃত হওয়ার আগে উপস্থিত কমপক্ষে সর্বনিম্ন কমাগুলিকে বিভক্ত করতে ব্যবহৃত হয়
যুক্তি. makepp এর বিল্টইন ফাংশন থেকে কিছু উদাহরণ:

my( $prefix, $text ) = args $_[0], $_[1], $_[2], 2, 2, 1; # যোগ উপসর্গ
আমার $cond এর জন্য ( args $_[0], undef, $_[2], ~0 ) ... # এবং, বা
আমার @args= args $_[0], $_[1], $_[2], ~0, 1, 1; # কল
my( $filters, $words ) = args $_[0], $_[1], $_[2]; # ছাঁকনি

ফাংশনটি একটি স্কেলার স্ট্রিং (একটি অ্যারে নয়) প্রদান করবে যা তারপরে ঢোকানো হয়
সেই সময়ে পাঠ্য।

আপনার ফাংশন একটি ত্রুটি সম্মুখীন হলে, এটি স্বাভাবিক পার্ল ডাই বিবৃতি ব্যবহার করে মারা উচিত.
এটি makepp এবং ফাইলের নাম এবং লাইন প্রদর্শনকারী একটি ত্রুটি বার্তা দ্বারা আটকে যাবে
অভিব্যক্তির সংখ্যা যা ত্রুটি সৃষ্টি করে তা প্রিন্ট করা হবে।

ফাংশন কি করতে পারে তার কোন সীমাবদ্ধতা নেই; আপনি ফাইল অ্যাক্সেস করতে পারেন, চালান
শেল কমান্ড, ইত্যাদি

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

লক্ষ্য করুন যে পরিবেশ (বিশেষত, cwd) যেখানে ফাংশনটি মূল্যায়ন করবে
অগত্যা মেকফাইল থেকে যা পরিবেশের নিয়মের সাথে মেলে
ফাংশন নির্বাহ করা হয় মূল্যায়ন করা হয়. যদি এটি আপনার জন্য একটি সমস্যা হয়, তাহলে আপনার ফাংশন
সম্ভবত এই মত কিছু দেখা উচিত:

সাব f_foo {
...
chdir $makefile->{CWD};

... ইত্যাদি
}

স্থাপন ক্রিয়াকলাপ মধ্যে a পার্ল মডিউল
আপনি যদি একটি অন্তর্ভুক্ত ফাইলে ফাংশন রাখেন, তাহলে আপনার প্রতি Makeppfile প্রতি একটি কপি থাকবে
এটা ব্যবহার করে এটি এড়াতে, আপনি একটি "রপ্তানিকারক" সহ একটি সাধারণ পার্ল মডিউল হিসাবে লিখতে পারেন
ইন্টারফেস, এবং এটি ব্যবহার করুন। এটি দ্রুত লোড করবে এবং মেমরি সংরক্ষণ করবে:

perl { mymodule ব্যবহার করুন }
পার্ল {
আমার::মডিউল ব্যবহার করুন; # put : একটি নতুন লাইনে তাই এটি একটি নিয়ম হিসাবে পার্স করা হয় না
}

আপনার যদি মেকফাইলে সাধারণত উপলব্ধ যেকোন ফাংশনের প্রয়োজন হয় (যেমন "f_"
ফাংশন, "আর্গ" বা "আর্গস"), আপনাকে অবশ্যই এই লাইনটি আপনার মডিউলে রাখতে হবে:

Mpp::Subs ব্যবহার করুন;

অসুবিধা হল যে মডিউলটি সরাসরি একটি ফাংশনের চেয়ে ভিন্ন প্যাকেজে থাকবে
একটি মেকফাইলে উপস্থিত হচ্ছে। তাই আপনাকে প্যারামিটার বা নির্মাণ হিসাবে সবকিছু পাস করতে হবে
পার্লের "কলার" ফাংশন সহ নাম।

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

&হুকুম যুক্তি ...
এটি একটি নিয়ম কর্ম হতে পারে. এটি একটি ফাংশন কল করবে হুকুম একটি "c_" উপসর্গ সহ, এবং
এটিকে অবশিষ্ট পাস করুন (ঐচ্ছিকভাবে উদ্ধৃত makepp শৈলী -- ঠিক একই রকম নয়
শেল) আর্গুমেন্ট। যদি এই ধরনের একটি ফাংশন খুঁজে না পাওয়া যায়, এটি সমস্ত স্ট্রিং পাস করে
"রান"।

sub c_mycmd { my @args = @_; ... }

$(ফনি কলসিএমডি):
&mycmd 'স্পেস সহ arg' arg2 "arg3" # c_mycmd কল করে

%.out: %.in
&myscript -o $(output) $(input) # বহিরাগত myscript কল করে

আপনি বিল্টিনগুলির কাঠামোর মধ্যে আপনার কমান্ড লিখতে পারেন, আপনাকে ব্যবহার করার অনুমতি দেয়
তাদের কাছে একই স্ট্যান্ডার্ড বিকল্প এবং তারা যে I/O হ্যান্ডলিং দেয়।

ব্লক অপারেটর "Mpp::Cmds::frame" একটি একক অক্ষর বিকল্প তালিকা অনুসরণ করে
বিল্টিনস (সর্বোচ্চভাবে "qw(fi I ​​o O rs)")। এমনকি যদি আপনি আপনার নিজের বিকল্প নির্দিষ্ট করুন
এর মধ্যে একটিকে ওভাররাইড করে, আপনি এখনও স্ট্যান্ডার্ড বিকল্পের একক অক্ষর দেন।

প্রতিটি নিজস্ব বিকল্প হিসাবে নির্দিষ্ট করা হয়েছে "[qw(n নাম), \$রেফ, arg, উপ]"। প্রথম দুইটা
উপাদান ছোট এবং দীর্ঘ নাম, পরিবর্তনশীল রেফারেন্স দ্বারা অনুসরণ এবং ঐচ্ছিকভাবে দ্বারা
একটি যুক্তি নিতে কিনা তার জন্য একটি বুলিয়ান। একটি arg ছাড়া, পরিবর্তনশীল হয়
প্রতিবার অপশন দেওয়া হলে বর্ধিত হয়, অন্যথায় বিকল্পের মান এতে সংরক্ষণ করা হয়।

sub c_my_ocmd { # সাধারণ আউটপুট কেস
স্থানীয় @ARGV = @_;
Mpp::Cmds::frame {

... এখানে @ARGV দিয়ে কিছু মুদ্রণ করুন, বিকল্পগুলি ইতিমধ্যেই স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়েছে

} 'f', qw(o O);
}

sub c_my_icmd { # 2টি বিকল্প সহ সাধারণ ইনপুট কেস
স্থানীয় @ARGV = @_;
my($short,$long);
Mpp::Cmds::frame {

... এখানে <> দিয়ে কিছু করুন

} qw(i I rs), # s শুধুমাত্র -- বিভাজক নির্দিষ্ট করে, -s নয়
[qw(s সংক্ষিপ্ত), \$short], # কোন বিকল্প নেই arg -> $short == 1
[qw(l long), \$long, 1, sub { warn "got arg $long"}];
}

এখানে একটি সাধারণ কমান্ড আসে যা প্রতিটি ইনপুটের প্রথম অক্ষরকে আপকেস করে
রেকর্ড ("&sed '$$_ = "\u\L$$_"'" এর সমতুল্য):

সাব c_uc {
স্থানীয় @ARGV = @_;
Mpp::Cmds::frame {
"\u\L$_" মুদ্রণ করার সময় <>;
} 'f', qw(i I o O rs);
}

ফ্রেম দ্বারা পরিচালিত ব্লকের মধ্যে, আপনি সমালোচনামূলক কাজ করার জন্য নেস্টেড ব্লক থাকতে পারেন
অপারেশন, অন্যান্য ফাইল খোলার মত।

Mpp::Cmds::perform { ... } 'বার্তা';

এটি "--verbose" সহ বার্তা আউটপুট করবে (যা প্রতিটি কমান্ড গ্রহণ করে) iff
কমান্ড সফলভাবে চালানো হয়। কিন্তু যদি ব্লকটিকে মিথ্যা হিসেবে মূল্যায়ন করে, তাহলে এটি মারা যাবে
নেতিবাচক বার্তা।

চালান লিপি যুক্তি ...
এটি একটি সাধারণ পার্ল ফাংশন যা আপনি আপনার মেকফাইলের মধ্যে যেকোনো পার্ল প্রসঙ্গে ব্যবহার করতে পারেন।
এটি সিস্টেমের মাল্টি-আর্গুমেন্ট ফর্মের মতো, তবে এটি পার্ল স্ক্রিপ্টের মধ্যে চালায়
বর্তমান প্রক্রিয়া। makepp স্টেটমেন্টের জন্য, পার্ল ফাংশন বা আপনার নিজস্ব ফাংশন
যে প্রক্রিয়া চলমান makepp. কিন্তু একটি নিয়মের জন্য যে সাবপ্রসেস পারফর্ম করছে
এটা স্ক্রিপ্টটি যতবার বলা হয় ততবার পার্স করা হয়, তবে আপনি আসলটি রাখতে পারেন
একটি lib এ কাজ করুন, যেমন pod2html করে। এই lib তারপর উপরের স্তরে ব্যবহার করা যেতে পারে, তাই
যে এটি ইতিমধ্যে উপস্থিত:

perl { mylib ব্যবহার করুন } # সমস্ত নিয়মের সাথে কাঁটাচামচ হয়ে যায় যার জন্য এটি রিপার্স করার দরকার নেই

%.out: %.in
makeperl { qw'myscript চালান -o $(output) $(input)' }

যদি স্ক্রিপ্টটি "প্রস্থান" বলে, স্ট্যান্ডার্ড ফাইল বর্ণনাকারী বন্ধ করে বা সিস্টেমের উপর নির্ভর করে
এটির পরে পরিষ্কার করতে (ফাইল খুলুন, মেমরি...), এটি "রান" এর সাথে একটি সমস্যা হতে পারে। যদি
আপনি বিবৃতি বা পার্ল ফাংশন মধ্যে "রান" কল, makepp বিরক্ত হতে পারে বা
ক্লিনআপ শুধুমাত্র makepp শেষে ঘটে।

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

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

এটি বিভিন্ন উপায়ে সম্পন্ন করা যেতে পারে। সবচেয়ে সহজ উপায় হল আপনার নিজের নতুন তৈরি করা
স্বাক্ষর পদ্ধতি (আসুন এটাকে "shared_object" বলি)। আপনি এই স্বাক্ষর পদ্ধতি ব্যবহার করবেন
শুধুমাত্র নিয়মে যা বাইনারি লিঙ্ক করে, যেমন:

myprogram: *.o lib1/lib1.so lib2/lib2.so
: স্বাক্ষর শেয়ার করা_অবজেক্ট
$(CC) $(ইনপুট) -o $(আউটপুট)

এখন আমাদের স্বাক্ষর পদ্ধতি তৈরি করতে হবে।

সমস্ত স্বাক্ষর পদ্ধতি তাদের নিজস্ব শ্রেণী হতে হবে, এবং শ্রেণীতে কিছু বিশেষ থাকতে হবে
আইটেম (বিস্তারিত জানার জন্য বিতরণে Mpp/Signature.pm দেখুন)। ক্লাসের নাম থাকতে হবে
"Mpp::Signature::" এর সাথে প্রিফিক্স করা হয়েছে, তাই এই ক্ষেত্রে আমাদের ক্লাস বলা উচিত
"Mpp::Signature::shared_object"। নামক একটি ফাইল তৈরি করতে হবে shared_object.pm এবং রাখ
এটি একটি মধ্যে এমপিপি::স্বাক্ষর পার্লের কোথাও ডাইরেক্টরি ইনক্লুড পাথ; সবচেয়ে সহজ জায়গা
মধ্যে হতে পারে এমপিপি/স্বাক্ষর makepp ইনস্টলেশনের ডিরেক্টরি (যেমন,
/usr/local/share/makepp/Mpp/স্বাক্ষর অথবা আপনি যেখানেই এটি ইনস্টল করেছেন)।

এই ক্লাসে কী যেতে হবে সে সম্পর্কে সুনির্দিষ্ট বিবরণের জন্য, আপনাকে সাবধানে দেখতে হবে
ফাইল Mpp/Signature.pm এবং সম্ভবত এছাড়াও Mpp/Signature/exact_match.pm makepp মধ্যে
বিতরণ কিন্তু আমাদের ক্ষেত্রে, আমরা যা করতে চাই তা হল একটিতে খুব ছোট পরিবর্তন করা
বিদ্যমান স্বাক্ষর প্রক্রিয়া; যদি ফাইলটি একটি ভাগ করা লাইব্রেরি হয়, আমরা একটি ধ্রুবক থাকতে চাই
স্বাক্ষর, যেখানে ফাইলটি অন্য কিছু হলে, আমরা makepp এর স্বাভাবিক উপর নির্ভর করতে চাই
স্বাক্ষর প্রক্রিয়া। এটি করার সর্বোত্তম উপায় হল থেকে উত্তরাধিকারী হওয়া
"Mpp::Signature::c_compilation_md5", যা স্বাক্ষর পদ্ধতি যা সাধারণত নির্বাচিত হয়
যখন makepp একটি লিঙ্ক কমান্ড সনাক্ত করে।

তাই ফাইল Mpp/Signature/shared_object.pm নিম্নলিখিত থাকতে পারে:

কঠোর ব্যবহার করুন;
প্যাকেজ Mpp::Signature::shared_object;
Mpp::Signature::c_compilation_md5 ব্যবহার করুন;
আমাদের @ISA = qw(Mpp::Signature::c_compilation_md5); # উত্তরাধিকার নির্দেশ করুন।
আমাদের $shared_object = আশীর্বাদ \@ISA; # ম্যাজিকের একটি টুকরো যা মেকপপকে খুঁজে পেতে সহায়তা করে
# এই পদ্ধতির জন্য সাবরুটিন। সব
# স্বাক্ষর পদ্ধতিতে এর মধ্যে একটি থাকতে হবে।
# মান ব্যবহার করা হয় না, শুধুমাত্র কোন বস্তু.
# এখন এখানে সেই পদ্ধতি যা ডাকা হয় যখন আমাদের স্বাক্ষরের প্রয়োজন হয়
# যে কোনো লক্ষ্য বা নির্ভরতা যার জন্য এই স্বাক্ষর পদ্ধতি সক্রিয়:
সাব স্বাক্ষর {
my ($self, # এটি $shared_object এর মতই হবে।
$finfo) = @_; # একটি বিশেষ কাঠামো যা সবকিছু ধারণ করে
# makepp এই ফাইল সম্পর্কে জানে। দেখা
বিস্তারিত জানার জন্য # Mpp/File.pm.

if ($finfo->{NAME} =~ /\.s[oa]$/) { # ফাইলের নাম কি .so বা .sa দিয়ে শেষ হয়?
ফেরত $finfo->file_exists? 'বিদ্যমান' : '';
# ফাইল থাকলে সবসময় একই স্বাক্ষর ফেরত দিন
# বিদ্যমান। এই ক্ষেত্রে, স্বাক্ষর হয়
# স্ট্রিং "বিদ্যমান"।
}

Mpp::স্বাক্ষর::c_compilation_md5::স্বাক্ষর;
# যদি ফাইলটি .so বা .sa-তে শেষ না হয়,
# মেকপিপের সাধারণ স্বাক্ষর পদ্ধতিতে প্রতিনিধি।
}

এই ফাইলটি মেকপ ডিস্ট্রিবিউশনে কিছু অতিরিক্ত সহ একটি উদাহরণ হিসাবে প্রদান করা হয়েছে
মন্তব্য নেই।

ঘটনাক্রমে, কেন আমরা এই ডিফল্ট না করা? ওয়েল, একটি পরিবর্তন করার সময় আছে
শেয়ার্ড লাইব্রেরিতে আপনার প্রোগ্রামের পুনরায় লিঙ্ক করার প্রয়োজন হবে। আপনি যদি কখনও হয় পরিবর্তন
প্রতীক যা একটি শেয়ার্ড লাইব্রেরি সংজ্ঞায়িত করে, বা চিহ্ন যা এটি অন্যান্য লাইব্রেরির উপর নির্ভর করে
জন্য, একটি পুনরায় লিঙ্ক কখনও কখনও প্রয়োজন হতে পারে.

ধরুন, উদাহরণস্বরূপ, ভাগ করা লাইব্রেরি আপনার প্রোগ্রামের কিছু সাবরুটিন আহ্বান করে
প্রদান করে। উদাহরণস্বরূপ, ধরুন আপনি ভাগ করা লাইব্রেরি পরিবর্তন করেছেন তাই এটি এখন একটি বহিরাগত কল করে
সাবরুটিন "xyz()"। আপনি লিঙ্কারে "-E" বা "--export-dynamic" বিকল্পটি ব্যবহার না করলে
(GNU binutils-এর জন্য; অন্যান্য লিঙ্কারের বিভিন্ন বিকল্পের নাম আছে), "xyz()" চিহ্ন নাও হতে পারে
রান-টাইম লিঙ্কারের কাছে অ্যাক্সেসযোগ্য হতে হবে এমনকি যদি এটি আপনার প্রোগ্রামে বিদ্যমান থাকে।

আরও খারাপ, ধরুন আপনি অন্য লাইব্রেরিতে "xyz()" সংজ্ঞায়িত করেছেন (এটিকে কল করুন libxyz), এটার মত:

my_program: main.o lib1/lib1.so xyz/libxyz.a

যেহেতু "libxyz" হল a .a ফাইল এবং না একটি .so ফাইল, তারপর "xyz()" টানা নাও হতে পারে
সঠিকভাবে থেকে libxyz.a যদি না আপনি আপনার বাইনারি পুনরায় লিঙ্ক করেন।

Mpp::স্বাক্ষর পদ্ধতি শুধুমাত্র স্ট্রিংকেই নিয়ন্ত্রণ করে না যা একটি কিনা তা নির্ধারণ করতে ব্যবহৃত হয়
ফাইল পরিবর্তিত হয়েছে, কিন্তু অ্যালগরিদম যা স্ট্রিং তুলনা করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, দ
makepp বিতরণে স্বাক্ষর পদ্ধতি "target_newer" শুধুমাত্র প্রয়োজন যে
লক্ষ্যগুলি নির্ভরতার চেয়ে নতুন হতে পারে, যেখানে স্বাক্ষর পদ্ধতি "exact_match" (এবং
সবকিছু যা এটির উপর নির্ভর করে, যেমন "md5" এবং "c_compilation_md5") এর জন্য প্রয়োজন যে
ফাইলটিতে শেষ বিল্ডের মতো একই স্বাক্ষর রয়েছে।

আপনাকে বুঝতে সাহায্য করার জন্য এখানে কিছু অন্যান্য ধরণের স্বাক্ষর পদ্ধতি রয়েছে যা দরকারী হতে পারে
সম্ভাবনাগুলো. সাধারণ উদ্দেশ্য যথেষ্ট হলে, এর মধ্যে কিছু শেষ পর্যন্ত হতে পারে
মেকপিপে অন্তর্ভুক্ত:

শেয়ার্ড লাইব্রেরির জন্য একটি স্বাক্ষর পদ্ধতি যা রপ্তানি করা সমস্ত চেকসাম ফেরত দেয়
প্রতীক, এবং অন্যান্য লাইব্রেরি থেকে প্রয়োজনীয় সমস্ত প্রতীক। এই সমাধান
উপরের উদাহরণের সাথে সমস্যা, এবং সমস্ত পরিস্থিতিতে একটি সঠিক লিঙ্কের গ্যারান্টি দেয়।
মেকপ ডিস্ট্রিবিউশনে এটি করার জন্য একটি পরীক্ষামূলক প্রচেষ্টা করা হয়েছে (দেখুন
Mpp/Signature/shared_object.pm), কিন্তু এটি শুধুমাত্র GNU binutils এবং ELF এর সাথে কাজ করবে
এই মুহূর্তে লাইব্রেরি।

একটি স্বাক্ষর পদ্ধতি যা একটি ফাইলে লেখা একটি তারিখ স্ট্যাম্প উপেক্ষা করে। যেমন, আপনি যদি
একটি উৎপন্ন .c ফাইল স্বয়ংক্রিয়ভাবে কিছু প্রোগ্রাম ব্যবহার করে যা একটি স্ট্রিং লাগাতে জোর দেয়
এই মত:

static char * date_stamp = "কেউ দ্বারা 01 এপ্রিল 2004 এ স্বয়ংক্রিয়ভাবে তৈরি করা হয়নি";

আপনি একটি স্বাক্ষর পদ্ধতি লিখতে পারেন যা বিশেষভাবে তারিখের স্ট্যাম্পের পরিবর্তন উপেক্ষা করে।
এইভাবে যদি তারিখের স্ট্যাম্পটি শুধুমাত্র পরিবর্তন করা হয় তবে makepp পুনর্নির্মাণ করবে না।

একটি স্বাক্ষর পদ্ধতি যা সাধারণ উপায়ে স্বাক্ষর গণনা করে, কিন্তু উপেক্ষা করে
পুনর্নির্মাণের সিদ্ধান্ত নেওয়ার সময় স্থাপত্য নির্ভরতা। এই জন্য দরকারী হতে পারে
সত্যিই আর্কিটেকচার-স্বাধীন ফাইল; বর্তমানে আপনি যদি একটি স্থাপত্যের উপর নির্মাণ করেন,
আপনি যখন স্যুইচ করবেন তখন makepp এমনকি আর্কিটেকচার-স্বাধীন ফাইলগুলি পুনর্নির্মাণের জন্য জোর দেবে
একটি ভিন্ন স্থাপত্যে।

একটি স্বাক্ষর পদ্ধতি যা লেটেক্স ফাইলে মন্তব্য উপেক্ষা করতে জানে
"c_compilation_md5" পদ্ধতিটি জানে কিভাবে সি ফাইলে মন্তব্য উপেক্ষা করতে হয়।

স্বয়ংক্রিয় ডকুমেন্টেশন নিষ্কাশনের জন্য একটি স্বাক্ষর পদ্ধতি যা শুধুমাত্র চেকসাম করে
মন্তব্য যে একটি ডকুমেন্টেশন এক্সট্র্যাক্টর প্রয়োজন এবং উৎসের অন্যান্য পরিবর্তন উপেক্ষা করে
ফাইল.

অসমাপ্ত
এই নথি এখনও শেষ হয়নি. আপনার নিজের স্ক্যানারগুলি কীভাবে লিখবেন তা কভার করা উচিত
ফাইল এবং যে মত জিনিস অন্তর্ভুক্ত.

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


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

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

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

Ad