Skip to content

كيف تُحزِّمُ التطبيقَ وتوزّعُه

اقرأْ هذا أوّلًا

لا توجدُ اليومَ أداةُ تحزيمٍ لتطبيقاتِ المستعمِلين في لغة ص. لا مولِّدَ مثبِّتٍ، ولا صانعَ حزمةٍ، ولا توقيعَ شفرة. وما يوجدُ في المستودعِ من مثبِّتاتٍ (.exe لويندوز و.sh و.deb للينكس) يُحزِّمُ سلسلةَ أدواتِ اللغةِ نفسِها لا تطبيقَك — راجعْ /.github/workflows/release.yml وصفحةَ التحميل.

فهذه الصفحةُ تصفُ ما قِيسَ عاملًا: ماذا يُنتِجُ المترجِمُ، وماذا تنسخُ معه، وأينَ تتوقّفُ الأداة.

١ · ما يُنتِجُه المترجِمُ

ملفٌّ تنفيذيٌّ أصليٌّ واحد، ومعه SDL2.dll منسوخةٌ تلقائيًّا إلى مجلَّدِ الإخراج. مقيسٌ على مجلَّدٍ فارغٍ فيه المصدرُ وحدَه:

bash
sad-build مفكرتي.ص -o مفكرتي.exe
2500096  SDL2.dll        ← نسخها المترجِمُ من تلقاءِ نفسِه
 475136  مفكرتي.exe

والنسخُ يجري لكلِّ برنامجٍ لا للواجهاتِ وحدَها

قِيسَ أنّ برنامجَ طرفيّةٍ لا يمسُّ الواجهةَ (اطبع_سطر("مرحبا") وحدَه، ٨٣٩٦٨ بايتًا) يُنسَخُ بجوارِه SDL2.dll كذلك.

٢ · ما تنسخُه للمستعمِل

الملفّلِمَ
تطبيقك.exeالبرنامجُ نفسُه
SDL2.dllمُصيِّرُ سطحِ المكتبِ يستعملُها — انسخْها بجوارِ الثنائيّ
أصولُك (صورٌ · خطوطٌ · بيانات)إن قرأها البرنامجُ بمسارٍ نسبيّ

مجلَّدٌ واحدٌ يُضغَطُ ويُسلَّم. لا مُثبِّتَ ولا سجلَّ نظامٍ ولا اعتماديّاتٍ أخرى.

٣ · أعلامُ البناءِ للتوزيع

العَلَمالأثرُ المقيس
-O2الافتراضيّ. يبني تطبيقَ الواجهةِ المرجعيَّ بنجاح
-Osيبني بنجاح — والحجمُ النهائيُّ لم يختلفْ عن -O2 بايتًا واحدًا في القياس (٤٥٢٠٩٦ في الحالَين)
-O3أخفقَ على تطبيقِ الواجهةِ المقيس بـINT004 (خطأُ مترجِمٍ داخليّ). ونجحَ على برنامجِ طرفيّةٍ بسيط
--ساكنأخفقَ صامتًا: رمزُ خروجٍ ١ بلا رسالةٍ وبلا ثنائيّ
-gيُدرِجُ معلوماتِ التنقيح — انزِعْه للتوزيع

-O3 و--ساكن قِيسا مُخفِقَينِ على هذه الشجرة

وهما مذكورانِ في مساعدةِ sad-build. فلا تبنِ عليهما خطّةَ توزيعٍ قبلَ أن تقيسَهما على برنامجِك أنت.

٤ · التوزيعُ عبرَ المنصّات

الترجمةُ المتقاطعةُ من ويندوزَ إلى لينكس قِيسَت مُخفِقةً عندَ الربط:

bash
sad-build hello.ص --هدف=x86_64-unknown-linux-gnu -o hello_linux
clang: error: linker command failed with exit code 1107
fatal error: فشل ربط الملف التنفيذي (رمز الخطأ: 1107)

فالطريقُ العمليُّ اليومَ: ابنِ على كلِّ منصّةٍ عليها. ولينكس وماك يمرّانِ على مسارِ SDL2 نفسِه — وتفصيلُه في لماذا SDL2 مخرَجًا مرجعيًّا.

ما لم يُقَسْ، فلا يُدَّعى

  • توقيعُ الشفرةِ (Authenticode · notarization على ماك): لا شيءَ في المترجِمِ ولا في المستودعِ يمسُّه.
  • حزمةُ .app لماك و.AppImage/.deb للينكس لتطبيقِ مستعمِل: لا مولِّدَ لها.
  • أيقونةُ التطبيقِ وبياناتُ نسخته: لا عَلَمَ في sad-build -h يضبطُهما.
  • ما إذا كانت SDL2.dll لازمةً فعلًا بجوارِ الثنائيّ: في القياس عمِلَ التطبيقُ بعدَ حذفِها من مجلَّدِه — والأرجحُ أنّها حُلَّت من موضعٍ آخرَ على جهازِ القياس. فالوصفةُ تبقى: انسخْها، لأنّ العكسَ غيرُ مُبرهَن.

كلُّ بندٍ ههنا دَينٌ مُقيَّدٌ لا سكوتٌ عنه؛ وحدودُ المجالِ كلُّها في حدودِ سطحِ المكتبِ المُعلَنة.

مُرخَّص بموجب رخصة MIT