كيف تُحزِّمُ التطبيقَ وتوزّعُه
اقرأْ هذا أوّلًا
لا توجدُ اليومَ أداةُ تحزيمٍ لتطبيقاتِ المستعمِلين في لغة ص. لا مولِّدَ مثبِّتٍ، ولا صانعَ حزمةٍ، ولا توقيعَ شفرة. وما يوجدُ في المستودعِ من مثبِّتاتٍ (.exe لويندوز و.sh و.deb للينكس) يُحزِّمُ سلسلةَ أدواتِ اللغةِ نفسِها لا تطبيقَك — راجعْ /.github/workflows/release.yml وصفحةَ التحميل.
فهذه الصفحةُ تصفُ ما قِيسَ عاملًا: ماذا يُنتِجُ المترجِمُ، وماذا تنسخُ معه، وأينَ تتوقّفُ الأداة.
١ · ما يُنتِجُه المترجِمُ
ملفٌّ تنفيذيٌّ أصليٌّ واحد، ومعه SDL2.dll منسوخةٌ تلقائيًّا إلى مجلَّدِ الإخراج. مقيسٌ على مجلَّدٍ فارغٍ فيه المصدرُ وحدَه:
sad-build مفكرتي.ص -o مفكرتي.exe2500096 SDL2.dll ← نسخها المترجِمُ من تلقاءِ نفسِه
475136 مفكرتي.exeوالنسخُ يجري لكلِّ برنامجٍ لا للواجهاتِ وحدَها
قِيسَ أنّ برنامجَ طرفيّةٍ لا يمسُّ الواجهةَ (اطبع_سطر("مرحبا") وحدَه، ٨٣٩٦٨ بايتًا) يُنسَخُ بجوارِه SDL2.dll كذلك.
٢ · ما تنسخُه للمستعمِل
| الملفّ | لِمَ |
|---|---|
تطبيقك.exe | البرنامجُ نفسُه |
SDL2.dll | مُصيِّرُ سطحِ المكتبِ يستعملُها — انسخْها بجوارِ الثنائيّ |
| أصولُك (صورٌ · خطوطٌ · بيانات) | إن قرأها البرنامجُ بمسارٍ نسبيّ |
مجلَّدٌ واحدٌ يُضغَطُ ويُسلَّم. لا مُثبِّتَ ولا سجلَّ نظامٍ ولا اعتماديّاتٍ أخرى.
٣ · أعلامُ البناءِ للتوزيع
| العَلَم | الأثرُ المقيس |
|---|---|
-O2 | الافتراضيّ. يبني تطبيقَ الواجهةِ المرجعيَّ بنجاح |
-Os | يبني بنجاح — والحجمُ النهائيُّ لم يختلفْ عن -O2 بايتًا واحدًا في القياس (٤٥٢٠٩٦ في الحالَين) |
-O3 | ⛔ أخفقَ على تطبيقِ الواجهةِ المقيس بـINT004 (خطأُ مترجِمٍ داخليّ). ونجحَ على برنامجِ طرفيّةٍ بسيط |
--ساكن | ⛔ أخفقَ صامتًا: رمزُ خروجٍ ١ بلا رسالةٍ وبلا ثنائيّ |
-g | يُدرِجُ معلوماتِ التنقيح — انزِعْه للتوزيع |
-O3 و--ساكن قِيسا مُخفِقَينِ على هذه الشجرة
وهما مذكورانِ في مساعدةِ sad-build. فلا تبنِ عليهما خطّةَ توزيعٍ قبلَ أن تقيسَهما على برنامجِك أنت.
٤ · التوزيعُ عبرَ المنصّات
الترجمةُ المتقاطعةُ من ويندوزَ إلى لينكس قِيسَت مُخفِقةً عندَ الربط:
sad-build hello.ص --هدف=x86_64-unknown-linux-gnu -o hello_linuxclang: error: linker command failed with exit code 1107
fatal error: فشل ربط الملف التنفيذي (رمز الخطأ: 1107)فالطريقُ العمليُّ اليومَ: ابنِ على كلِّ منصّةٍ عليها. ولينكس وماك يمرّانِ على مسارِ SDL2 نفسِه — وتفصيلُه في لماذا SDL2 مخرَجًا مرجعيًّا.
ما لم يُقَسْ، فلا يُدَّعى
- توقيعُ الشفرةِ (Authenticode · notarization على ماك): لا شيءَ في المترجِمِ ولا في المستودعِ يمسُّه.
- حزمةُ
.appلماك و.AppImage/.debللينكس لتطبيقِ مستعمِل: لا مولِّدَ لها. - أيقونةُ التطبيقِ وبياناتُ نسخته: لا عَلَمَ في
sad-build -hيضبطُهما. - ما إذا كانت
SDL2.dllلازمةً فعلًا بجوارِ الثنائيّ: في القياس عمِلَ التطبيقُ بعدَ حذفِها من مجلَّدِه — والأرجحُ أنّها حُلَّت من موضعٍ آخرَ على جهازِ القياس. فالوصفةُ تبقى: انسخْها، لأنّ العكسَ غيرُ مُبرهَن.
كلُّ بندٍ ههنا دَينٌ مُقيَّدٌ لا سكوتٌ عنه؛ وحدودُ المجالِ كلُّها في حدودِ سطحِ المكتبِ المُعلَنة.