عربيالفرنسيةالإسبانية

Ad


OnWorks فافيكون

makepp_extending - عبر الإنترنت في السحابة

قم بتشغيل makepp_extending في موفر الاستضافة المجاني OnWorks عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذا هو الأمر makepp_extending الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


makepp_extending - كيفية تمديد makepp باستخدام Perl

الوصف


يتميز Makepp داخليًا بالمرونة الكافية بحيث يمكنك كتابة القليل من كود Perl
إضافة وظائف أو القيام بعدد من العمليات الأخرى.

العلاجات العامة ملاحظات on جاري الكتابة بيرل الكود إلى العمل مع com.makepp
كل makefile يعيش في الحزمة الخاصة به. وبالتالي فإن التعريفات الموجودة في ملف تعريف واحد لا تؤثر
التعريفات في makefile آخر. مجموعة مشتركة من الوظائف بما في ذلك جميع المعايير
يتم استيراد وظائف معالجة النصوص إلى الحزمة عند إنشائها.

يتم تخزين متغيرات Makefile كمقاييس Perl في تلك الحزمة. (هناك استثناءات ل
هذا: المتغيرات التلقائية والقيمة الافتراضية للمتغيرات مثل CC هي في الواقع
يتم تنفيذها كوظائف بدون وسائط. استهداف vars محدد، vars سطر الأوامر و
لا يتم رؤية متغيرات البيئة بهذه الطريقة.) وبالتالي فإن أي كود Perl تكتبه لديه حق الوصول إلى الكل
متغيرات ملف التعريف. يتم تخزين المتغيرات العامة في الحزمة "Mpp::global". يرى
متغيرات Makefile للحصول على التفاصيل.

كل عبارة من العبارات (ifperl / ifmakeperl، Perl / makeperl، sub / makesub)، تكون
الوظائف (Perl / makeperl، Map / makemap) وإجراء القاعدة (Perl / makeperl) لـ
تأتي كتابة كود Perl مباشرة في ملف makefile في نكهتين. الأول على الاطلاق
لغة Perl عادية، مما يعني أنه يتعين عليك استخدام البادئة "f_" كما هو موضح في القسم التالي، إذا
تريد استدعاء وظائف makepp. يقوم المتغير الثاني أولاً بتمرير البيان
توسيع متغير لنمط الصنع، مما يعني أنه يجب عليك مضاعفة "$" التي تريد أن يراها Perl.

تعد المعالجة النهائية أمرًا خاصًا لأن بيانات makepp الضخمة (اعتمادًا على نظام البناء الخاص بك).
قد تستغرق الهياكل عدة ثوانٍ لتجميع القمامة مع الخروج العادي. لذلك نقوم أ
خروج القوة الغاشمة. في العملية الرئيسية، لا يزال بإمكانك الحصول على كتل "END" ولكن إذا كان لديك أي منها
مقابض الملفات العامة قد لا يتم مسحها. ولكن يجب أن تستخدم المعجم الحديث
معالجات الملفات، والتي يتم إغلاقها بشكل صحيح عند الخروج عن النطاق.

في رمز Perl، يتم تشغيله مباشرة كإجراء قاعدة أو عبر أمر تحدده، وهو
عكس. لن يتم تشغيل كتل "END"، ولكن سيتم مسح معالجات الملفات العامة لك. ال
لن يتم تشغيل "تدمير" الكائنات العالمية أبدًا.

إضافة جديد نصي وظائف
يمكنك إضافة وظيفة جديدة إلى ذخيرة makepp ببساطة عن طريق تحديد روتين فرعي لـ Perl
نفس الاسم ولكن مع البادئة "f_". على سبيل المثال:

فرعي f_myfunc {
الوسيطة $ = &ar; # اسم الوسيطة.
my( undef, $mkfile, $mkfile_line ) = @_; # تسمية الحجج.

... افعل شيئًا هنا

إرجاع $return_value؛
}

XYZ := $(myfunc وسيطات func الخاصة بي)

إذا كانت وظيفتك لا تأخذ أي وسيطات، فليس هناك ما يمكنك فعله. إذا كانت وظيفتك تأخذ واحدة
الوسيطة، كما في المثال أعلاه، استخدم الملحق البسيط &arg للحصول عليها. اذا أنت
إذا توقعت المزيد من الوسائط، فأنت بحاجة إلى "وسائط" الوصول الأكثر تعقيدًا الموضحة أدناه.

تقوم أدوات الوصول هذه بمعالجة نفس المعلمات الثلاث التي يجب تمريرها إلى أي "f_"
دالة، وهي وسيطات الوظيفة، وكائن makefile واصف السطر لـ
رسائل. لذلك يمكنك استخدام نموذج &arg الفعال في الحالة الأولى.

يتولى ملحق &arg ما يلي نيابةً عنك: إذا كانت الوسائط موجودة بالفعل
موسعة (على سبيل المثال للعثور على اسم الوظيفة في "$(my$(function) arg)" الوسيطة هي
مرت كسلسلة وعاد للتو. إذا كانت الحجة لا تزال بحاجة إلى التوسع، فهذا هو
في الحالة المعتادة، فهو بدلاً من ذلك إشارة إلى سلسلة. يقوم الملحق &arg بتوسيعها لك،
والتي تحتاج إلى كائن makefile كمعلمة ثانية لها.

إذا كنت تتوقع المزيد من الوسائط، ربما بأرقام متغيرة، فسيتم تنفيذ المهمة بواسطة "args".
يأخذ هذا الموصل نفس المعلمات الثلاثة مثل arg، بالإضافة إلى معلمات إضافية:

الحد الأقصى: عدد الوسائط (الافتراضي 2): إعطاء ~0 (maxint) لا نهاية لها
الحد الأدنى: عدد الوسائط (الافتراضي 0 إذا كان الحد الأقصى هو ~0، وإلا فهو نفس الحد الأقصى)
فقط_الفاصلة: لا تأخذ مساحة حول الفواصل، وهو أمر معتاد بالنسبة لغير أسماء الملفات

على الأكثر، ولكن على الأقل يتم استخدام الفواصل الدقيقة الموجودة قبل التوسيع لتقسيم
الحجج. بعض الأمثلة من وظائف 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]; # منقي

يجب أن تقوم الدالة بإرجاع سلسلة عددية (وليس مصفوفة) والتي يتم إدراجها بعد ذلك في ملف
النص في تلك المرحلة.

إذا واجهت وظيفتك خطأ، فيجب أن تموت باستخدام عبارة Perl die المعتادة.
سيتم محاصرة هذا بواسطة makepp ورسالة خطأ تعرض اسم الملف والسطر
ستتم طباعة رقم التعبير الذي تسبب في الخطأ.

لا توجد في الأساس أي حدود لما يمكن أن تفعله الوظيفة؛ يمكنك الوصول إلى الملف، تشغيل
أوامر شل، الخ.

في الوقت الحاضر، يتم توسيع التعبيرات التي تظهر في التبعيات وفي إجراءات القاعدة
مرة واحدة بينما يتم توسيع التعبيرات التي تظهر في الأهداف مرتين، لذا كن حذرًا إذا كان لديك
الدالة لها آثار جانبية وهي موجودة في تعبير لهدف ما.

لاحظ أن البيئة (على وجه الخصوص، cwd) التي يتم فيها تقييم الوظيفة ستكون كذلك
لا تتطابق بالضرورة مع البيئة التي توجد فيها القواعد من ملف Makefile الذي يوجد فيه ملف
تم تقييم الوظيفة وتنفيذها. إذا كانت هذه مشكلة بالنسبة لك، فهذه وظيفتك
ربما ينبغي أن تبدو شيئا من هذا القبيل:

فرعي f_foo {

chdir $makefile->{CWD};

... الخ
}

وضع وظائف إلى a بيرل وحدة
إذا قمت بوضع وظائف في ملف تضمين، فسيكون لديك نسخة واحدة لكل ملف Makeppfile
يستخدمه. لتجنب ذلك، يمكنك كتابتها كوحدة Perl عادية باستخدام "مصدر"
الواجهة، واستخدام ذلك. سيتم تحميل هذا بشكل أسرع وحفظ الذاكرة:

بيرل {استخدم mymodule}
بيرل {
استخدم بلدي::module; # ضع : في سطر جديد حتى لا يتم تحليله كقاعدة
}

إذا كنت بحاجة إلى أي من الوظائف المتوفرة عادةً في ملف Makefile (مثل "f_"
وظائف، "arg" أو "args")، يجب عليك وضع هذا السطر في الوحدة النمطية الخاصة بك:

استخدم Mpp::Subs;

العيب هو أن الوحدة ستكون في حزمة مختلفة عن الوظيفة مباشرة
تظهر في ملف makefile. لذلك تحتاج إلى تمرير كل شيء كمعلمات، أو إنشاء
الأسماء باستخدام وظيفة "المتصل" في Perl.

دعوة خارجي بيرل مخطوطات
إذا قمت باستدعاء نص Perl خارجي عبر "النظام"، أو كإجراء قاعدة، فسوف يقوم makepp بتفرع ملف
عملية جديدة (ما لم يكن هذا هو الإجراء الأخير للقاعدة) وأطلق مترجم Perl جديدًا تمامًا.
لا حرج في ذلك، إلا أن هناك طريقة أكثر فعالية:

&أمر الحجج ...
يمكن أن يكون هذا إجراء قاعدة. سوف يستدعي وظيفة أمر مع البادئة "c_"، و
قم بتمرير ما تبقى منه (نمط makepp المقتبس اختياريًا - وليس تمامًا مثل
شل) الحجج. إذا لم يتم العثور على مثل هذه الوظيفة، فسيتم تمرير كافة السلاسل إلى
"يجري".

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

$(مكالمة زائفةcmd):
&mycmd 'arg with space' arg2 "arg3" # يدعو c_mycmd

%.خارج: %.in
&myscript -o $(output) $(input) # يستدعي myscript الخارجي

يمكنك كتابة الأوامر الخاصة بك في إطار الإضافات، مما يسمح لك باستخدامها
نفس الخيارات القياسية المتوفرة لديهم، ومعالجة الإدخال/الإخراج التي يقدمونها.

مشغل الكتلة "Mpp::Cmds::frame" متبوعًا بقائمة خيارات مكونة من حرف واحد
المدمجات (الحد الأقصى "qw(fi I ​​o O rs)"). حتى لو قمت بتحديد الخيار الخاص بك
بتجاوز أحد هذه العناصر، ستظل تعطي الحرف الوحيد للخيار القياسي.

يتم تحديد كل خيار خاص كـ "[qw(n name)، \$المرجع، حج ، الفرعية]". أول إثنين
العناصر عبارة عن اسم قصير وطويل، متبوعًا بمرجع المتغير واختياريًا بواسطة
منطقية لمعرفة ما إذا كان يجب أخذ حجة. بدون وسيطة، المتغير هو
وتزداد في كل مرة يتم فيها إعطاء الخيار، وإلا يتم تخزين قيمة الخيار فيه.

sub c_my_ocmd { # حالة الإخراج النموذجية
local @ARGV = @_;
مب::كمدس::الإطار {

... اطبع شيئًا ما هنا باستخدام @ARGV، مع إزالة الخيارات تلقائيًا بالفعل

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

sub c_my_icmd { # حالة إدخال نموذجية مع خيارين
local @ARGV = @_;
بلدي ($قصير، $طويل)؛
مب::كمدس::الإطار {

... افعل شيئًا هنا باستخدام <>

} qw(i I rs), # s يحدد فقط --separator، وليس -s
[qw(s short), \$short], # لا يوجد خيار arg -> $short == 1
[qw(l long), \$long, 1, sub { تحذير "حصلت على وسيطة $long"}];
}

هنا يأتي أمر بسيط يقوم بترقية الحرف الأول فقط من كل إدخال
السجل (يعادل "&sed '$$_ = "\u\L$$_"'"):

فرعي c_uc {
local @ARGV = @_;
مب::كمدس::الإطار {
اطبع "\u\L$_" أثناء <>؛
} 'f', qw(i I o O rs);
}

داخل الكتلة التي يتم التعامل معها بواسطة الإطار، يمكن أن يكون لديك كتل متداخلة لأداء مهم
العمليات، مثل فتح الملفات الأخرى.

Mpp::Cmds::perform { ... } 'message';

سيؤدي هذا إلى إخراج رسالة تحتوي على "--verbose" (والتي يقبلها كل أمر) في حالة حدوث ذلك
تم تشغيل الأمر بنجاح. ولكن إذا تم تقييم الكتلة على أنها كاذبة، فإنها تموت
رسالة مرفوضة.

يجري سيناريو الحجج ...
هذه وظيفة Perl عادية يمكنك استخدامها في أي سياق Perl ضمن ملف التعريف الخاص بك.
وهو مشابه لنموذج النظام متعدد الوسائط، ولكنه يقوم بتشغيل البرنامج النصي Perl بداخله
العملية الحالية. بالنسبة لبيانات makepp، وظيفة Perl أو وظائفك الخاصة
هذه هي عملية تشغيل makepp. ولكن بالنسبة للقاعدة التي تؤدي العملية الفرعية
هو - هي. يتم تحليل النص عدة مرات كما يتم استدعاؤه، ولكن يمكنك وضع النص الحقيقي
العمل في lib، كما يفعل pod2html. يمكن بعد ذلك استخدام هذا lib في المستوى الأعلى، لذلك
أنه موجود بالفعل:

Perl { use mylib } # يتم تشعبه لجميع القواعد التي لا تحتاج إلى إعادة تحليلها

%.خارج: %.in
makeperl { تشغيل qw'myscript -o $(output) $(input)' }

إذا كان البرنامج النصي يستدعي "خروج"، فسيتم إغلاق واصفات الملف القياسية أو يعتمد على النظام
للتنظيف بعد ذلك (الملفات المفتوحة، الذاكرة...)، قد تكون هذه مشكلة في "التشغيل". لو
إذا قمت باستدعاء "تشغيل" ضمن البيانات أو وظيفة Perl، فقد يتم إزعاج makepp أو قد يحدث ذلك
يحدث التنظيف فقط في نهاية makepp.

إذا كان لديك إحدى المشاكل المذكورة أعلاه، قم بتشغيل البرنامج النصي خارجيًا، أي اعتبارًا من
سطر الأوامر بدلا من ذلك. يعد التنظيف ضمن القاعدة مشكلة أقل، لا سيما لا
باعتباره الإجراء الأخير للقاعدة، نظرًا لأن العملية الفرعية للقاعدة ستخرج بعد ذلك على أي حال،
باستثناء على ويندوز.

نادي الكتابة من خلال الخاصة توقيع طرق
في بعض الأحيان تريد أن يقوم makepp بحساب طريقة التوقيع باستخدام تقنية مختلفة. ل
على سبيل المثال، لنفترض أن لديك ثنائيًا يعتمد على مكتبة مشتركة. في العادة، إذا كنت
إذا قمت بتغيير المكتبة المشتركة، فلن تضطر إلى إعادة ربط الملفات التنفيذية التي تعتمد عليها لأنه
ويتم الارتباط في وقت التشغيل. (ومع ذلك، من الممكن إعادة ربط الملف القابل للتنفيذ
قد يكون ضروريًا، ولهذا السبب لم أجعل هذا هو الإعداد الافتراضي.) ما تريد makepp
ما عليك فعله هو الحصول على نفس التوقيع للمكتبة المشتركة حتى لو تغيرت.

هاذا يمكن أن يكون إنجاز بطرق متعددة. أسهل طريقة هي إنشاء جديد خاص بك
طريقة التوقيع (دعنا نسميها "shared_object"). ستستخدم طريقة التوقيع هذه
فقط على القواعد التي تربط الثنائيات، مثل هذا:

برنامجي : *.o lib1/lib1.so lib2/lib2.so
: التوقيع Share_object
$ (CC) $ (المدخلات) -o $ (المخرجات)

الآن علينا إنشاء طريقة التوقيع.

يجب أن تكون جميع طرق التوقيع فئة خاصة بها، ويجب أن تحتوي الفئة على عدد قليل من الطرق الخاصة
العناصر (انظر Mpp/Signature.pm في التوزيع للحصول على التفاصيل). يجب أن يكون اسم الفصل
مسبوقة بـ "Mpp::Signature::"، لذلك في هذه الحالة يجب استدعاء فصلنا
"Mpp::Signature::shared_object". علينا إنشاء ملف يسمى Shared_object.pm ووضع
إلى مب::التوقيع الدليل في مكان ما في مسار تضمين Perl؛ أسهل مكان
قد يكون في MPP/التوقيع الدليل في تثبيت makepp (على سبيل المثال،
/usr/local/share/makepp/Mpp/Signature أو أينما قمت بتثبيته).

للحصول على تفاصيل دقيقة حول ما يجب أن يحدث في هذا الفصل، يجب عليك أن تنظر بعناية
الملف Mpp/التوقيع.pm وربما أيضا Mpp/التوقيع/exact_match.pm في الماكياج
توزيع. لكن في حالتنا، كل ما نريد فعله هو إجراء تغيير بسيط جدًا على أحد
آلية التوقيع الحالية؛ إذا كان الملف مكتبة مشتركة، فنحن نريد أن يكون لدينا ثابت
التوقيع، بينما إذا كان الملف أي شيء آخر، فإننا نريد الاعتماد على makepp العادي
آلية التوقيع. أفضل طريقة للقيام بذلك هي أن ترث من
"Mpp::Signature::c_compilation_md5"، وهي طريقة التوقيع التي يتم اختيارها عادةً
عندما يتعرف makepp على أمر الارتباط.

لذلك الملف Mpp/التوقيع/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::Signature::c_compilation_md5::signature;
# إذا لم يكن الملف منتهيًا بـ .so أو .sa،
# مندوب لطريقة التوقيع المعتادة لـmakepp.
}

يتم توفير هذا الملف كمثال في توزيعة makepp، مع بعض الإضافات
التعليقات.

بالمناسبة، لماذا لا نجعل هذا هو الافتراضي؟ حسنا، هناك أوقات عند تغيير أ
ستتطلب المكتبة المشتركة إعادة ربط برنامجك. إذا قمت بتغيير أي من
الرموز التي تحددها المكتبة المشتركة، أو الرموز التي تعتمد عليها المكتبات الأخرى
لأن إعادة الارتباط قد تكون ضرورية في بعض الأحيان.

لنفترض، على سبيل المثال، أن المكتبة المشتركة تستدعي بعض الإجراءات الفرعية التي يقوم بها برنامجك
يوفر. على سبيل المثال، لنفترض أنك قمت بتغيير المكتبة المشتركة بحيث تستدعي الآن مكتبة خارجية
روتين فرعي "xyz ()". إلا إذا كنت تستخدم الخيار "-E" أو "--export-dynamic" للرابط
(بالنسبة لـ GNU binutils؛ الروابط الأخرى لها أسماء خيارات مختلفة)، قد لا يكون الرمز "xyz()" كذلك
يمكن الوصول إليه بواسطة رابط وقت التشغيل حتى لو كان موجودًا في برنامجك.

والأسوأ من ذلك، لنفترض أنك حددت "xyz()" في مكتبة أخرى (أطلق عليها اسم libxyz)، مثله:

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

نظرًا لأن "libxyz" عبارة عن ملف .a ملف وليس .وبالتالي الملف، فقد لا يتم سحب "xyz()" للداخل
بشكل صحيح من libxyz.a إلا إذا قمت بإعادة ربط الثنائي الخاص بك.

لا تتحكم أساليب Mpp::Signature أيضًا في السلسلة المستخدمة لتحديد ما إذا كان a
لقد تغير الملف، ولكن الخوارزمية المستخدمة لمقارنة السلاسل. على سبيل المثال،
تتطلب طريقة التوقيع "target_newer" في توزيع makepp فقط أن يكون
تكون الأهداف أحدث من التبعيات، في حين أن طريقة التوقيع "exact_match" (و
وكل ما يعتمد عليه، مثل "md5" و"c_compilation_md5") يتطلب
الملف له نفس التوقيع كما في البناء الأخير.

فيما يلي بعض الأنواع الأخرى من طرق التوقيع التي قد تكون مفيدة لمساعدتك على إدراك ذلك
الامكانيات. إذا كان الغرض العام كافيا، فقد يكون بعض هذه الأغراض في نهاية المطاف
تم دمجها في makepp:

· طريقة التوقيع للمكتبات المشتركة التي تقوم بإرجاع المجموع الاختباري لكل ما تم تصديره
الرموز، وأيضاً جميع الرموز التي يحتاجها من المكتبات الأخرى. هذا يحل
مشكلة مع المثال أعلاه، ويضمن الارتباط الصحيح في جميع الظروف.
تم إجراء محاولة تجريبية للقيام بذلك في توزيع makepp (انظر
Mpp/التوقيع/shared_object.pm)، ولكنه سيعمل فقط مع GNU binutils وELF
المكتبات في الوقت الراهن.

· أسلوب التوقيع الذي يتجاهل ختم التاريخ المكتوب في الملف. على سبيل المثال، إذا كنت
توليد .c file تلقائيًا باستخدام بعض البرامج التي تصر على وضع سلسلة
في مثل هذا:

static char * date_stamp = "تم الإنشاء تلقائيًا في 01 أبريل 2004 بواسطة لا أحد";

يمكنك كتابة طريقة توقيع تتجاهل على وجه التحديد التغييرات في طوابع التاريخ.
ومن ثم، إذا كان طابع التاريخ هو الشيء الوحيد الذي تغير، فلن يتم إعادة بناء makepp.

· طريقة التوقيع التي تحسب التوقيعات بالطريقة العادية، ولكنها تتجاهل التوقيع
الاعتماد على الهندسة المعمارية عند اتخاذ قرار بشأن إعادة البناء. قد يكون هذا مفيدًا ل
ملفات مستقلة عن الهندسة المعمارية حقًا؛ حاليًا، إذا قمت بالبناء على بنية واحدة،
سوف يصر makepp على إعادة إنشاء حتى الملفات المستقلة عن البنية عند التبديل
إلى بنية مختلفة.

· طريقة التوقيع التي تعرف كيفية تجاهل التعليقات في ملفات اللاتكس، مثل
تعرف طريقة "c_compilation_md5" كيفية تجاهل التعليقات في ملفات C.

· طريقة توقيع لاستخراج الوثائق تلقائيًا والتي تجمع المجموع الاختباري فقط
التعليقات التي يحتاجها مستخرج الوثائق ويتجاهل التغييرات الأخرى في المصدر
ملف.

ناقص
هذه الوثيقة لم تنته بعد. يجب أن يغطي كيفية كتابة الماسحات الضوئية الخاصة بك
تشمل الملفات وأشياء من هذا القبيل.

استخدم makepp_extending عبر الإنترنت باستخدام خدمات onworks.net


خوادم ومحطات عمل مجانية

قم بتنزيل تطبيقات Windows و Linux

  • 1
    بين قوسين
    بين قوسين
    Brackets هو مصدر مفتوح مجاني وحديث
    محرر نصوص مصمم خصيصًا للويب
    تطوير. مكتوب بلغة HTML و CSS و
    JavaScript مع أدوات بصرية مركزة و
    الإعدادية ...
    تنزيل الأقواس
  • 2
    مترجم باسكال مجاني
    مترجم باسكال مجاني
    مترجم باسكال 32/64/16 بت لملفات
    Win32 / 64 / CE ، Linux ، Mac OS X / iOS ،
    Android ، FreeBSD ، OS / 2 ، Game Boy
    Advance و Nintendo NDS و DOS ؛
    متوافق لغويًا مع ...
    تحميل برنامج Free Pascal Compiler
  • 3
    معلومات Canon EOS DIGITAL
    معلومات Canon EOS DIGITAL
    لا تحتوي Canon على عدد مصراع
    المدرجة في معلومات EXIF ​​من ملف
    على عكس ملفات Nikon و
    بنتاكس. لا يوجد مقر رسمي لشركة Canon
    تطبيق ...
    قم بتنزيل Canon EOS DIGITAL Info
  • 4
    المرجع
    المرجع
    المرجع هو شوكة التمهيد المرجعي
    مدير. مثل rEFIt ، rEFInd يمكن
    الكشف التلقائي عن التمهيد EFI المثبت الخاص بك
    لوادر ويقدم واجهة مستخدم رسومية جميلة
    قائمة خيار التمهيد ...
    تحميل REFInd
  • 5
    اكسبريس لوك جي إس آي
    اكسبريس لوك جي إس آي
    صفحة تنزيل SourceForge هذه كانت إلى
    منح المستخدمين تنزيل المصدر الخاص بي
    GSIs ، بناءً على فوسون العظيم
    الشغل. أقوم بإنشاء Android Pie و
    أندرويد 1 ...
    تنزيل ExpressLuke GSI
  • 6
    المذيع الموسيقى
    المذيع الموسيقى
    Music Caster هو مشغل موسيقى صينية
    يتيح لك إرسال الموسيقى المحلية إلى ملف
    جهاز Google Cast. في الجولة الأولى ،
    ستحتاج إلى النقر فوق السهم الموجود في ملف
    تاس ...
    تحميل Music Caster
  • أكثر "

أوامر لينكس

Ad