أريد فقط تطوير شيء مختلف. ولكن ماذا؟ اللعبة، الرسومات، معالجة الصوت؟
بالتأكيد ستقول الصدأ! نعم فعلت الكثير من الأشياء في الصدأ. ولكن ربما C؟
أوه... لا...
تذكر خطأ التقسيم؟
كيف ستدير التبعيات؟
حسنًا، حاول استخدام بعض مكتبات C في ZIG! ما مدى صعوبة الأمر؟ دعنا نرى.
حاول كتابة تطبيق بسيط باستخدام raylib.
$ mkdir ray_test_zig $ cd ray_test_zig $ zig init-exe
حصلت على مشروع. هل تحاول الركض؟
$ zig build run
نعم إنه يعمل.
نحن بحاجة لجلب وتضمين raylib بطريقة أو بأخرى.
يستخدم Zig zon لجلب التبعيات. هل يعمل مع مكتبات C؟ اكتشف!
نحتاج إلى توفير مكان وجود lib! ها هو:
إنشاء ملف build.zig.zon.
.{ .name = "ray_test_zig", .version = "0.0.1", .dependencies = .{ .raylib = .{ .url = "https://github.com/raysan5/raylib/archive/refs/tags/5.0.tar.gz", }, }, }
هل تحاول بناء مشروع؟
$ zig build
ما هو؟
Fetch Packages... raylib... ./ray_test_zig/build.zig.zon:7:20: error: url field is missing corresponding hash field .url = "https://github.com/raysan5/raylib/archive/refs/tags/5.0.tar.gz", ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ note: expected .hash = "1220c28847ca8e8756734ae84355802b764c9d9cf4de057dbc6fc2b15c56e726f27b",
حسنًا، تتوقع zon حدوث تجزئة، فقط في حالة محاولة شخص ما اختراق جهاز الكمبيوتر. مرة اخرى:
.{ .name = "ray_test_zig", .version = "0.0.1", .dependencies = .{ .raylib = .{ .url = "https://github.com/raysan5/raylib/archive/refs/tags/5.0.tar.gz", .hash = "1220c28847ca8e8756734ae84355802b764c9d9cf4de057dbc6fc2b15c56e726f27b", }, }, }
حاول مرة أخرى:
$ zig build
إنها تعمل! واووووو! هذا كل شيء؟
لا! نحن بحاجة إلى إخبار zig بتضمين raylib أثناء الإنشاء!
الآن سنقوم بتحرير build.zig. أعلى السطر ~ 30 مباشرة لدينا b.installArtifact(exe);
قبل هذا السطر نحتاج إلى إضافة:
const raylib = b.dependency("raylib", .{ .target = target, .optimize = optimize, }); exe.installLibraryHeaders(raylib.artifact("raylib")); exe.linkLibrary(raylib.artifact("raylib"));
نحن نتواصل معكم حول مكان وجود ملفات الرأس ونربطها بالملف القابل للتنفيذ مع raylib.
هل يعمل؟ دعونا تحقق!
$ zig build
يا إلهي! يبدو أن شيئًا ما قد حدث مع رايليب. تم تجميعها؟
دعونا ننقل مثالًا بسيطًا من raylib إلى zig.
في src/main.zig:
const std = @import("std"); const ray = @cImport({ @cInclude("raylib.h"); }); pub fn main() !void { ray.InitWindow(800, 450, "Hey ZIG"); defer ray.CloseWindow(); while (!ray.WindowShouldClose()) { ray.BeginDrawing(); ray.ClearBackground(ray.RAYWHITE); ray.DrawText("Congrats! You created your first window!", 190, 200, 20, ray.LIGHTGRAY); ray.EndDrawing(); } }
$ zig build
لا اخطاء؟ عظيم!
$ zig build run
لقد حصلنا على نافذة رايليب!
كما ترون! سطر واحد فقط من التعليمات البرمجية وraylib يعملان مثل lib الأصلي!
إذن نعم! منعرج يمكن C!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3