Здравствуйте. Задался вопросом о том как кастомизировать компиляцию кода относительно заданных свойств. К примеру относительно ос для которой идет сборка. Сам нашел два способа, но оба способа так себе выглядят:
1. Вынести код под отдельную ос в файлфайлы и подгружать их как модуль.
|
1 |
if (builtin.os.tag == .linux) { exe.root_module.addAnonymousImport("window_api", .{ .root_source_file = .{ .path = "src/windowX11.zig" }, }); } else { exe.root_module.addAnonymousImport("window_api", .{ .root_source_file = .{ .path = "src/windowNT.zig" }, }); } |
затем добавляем модуль в рабочий файл к примеру main.zig
const w = @import("window_api");
Всё работает отлично, но если есть тип который необходимо использовать во всех трех файлах (main.zig, windowNT.zig, windowX11.zig) и он находится в стороннем файле (types.zig), то подключить и к "root" части программы и к модулю одновременно его нельзя.
2. Просто с помошью if и builtin.os.tag создавать ветвление кода.
К примеру в самом main.zig
|
1 |
const c = @cImport({ if (builtin.os.tag == .linux) { @cInclude("X11/Xlib.h"); } if (builtin.os.tag == .windows) { @cInclude("windows.h"); @cInclude("windowsx.h"); } }); fn Window() type { if (builtin.os.tag == .linux) { return struct {...} } if (builtin.os.tag == .windows) { return struct {...} } |
Тоже работает, но выглядит не очень чисто, плюс zls пока не корректно работает с builtin
Соответственно вопрос, возможно ли просто подключать файлы (без создания отдельного модуля), для выбора компиляции или есть иные свойства build.zig. Просто документация по build.zig достаточно скудная, а старые примеры из версий 0.6 - 0.8 уже некорректы.
Дополнительно:
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?
Для корректного разделения частей кода для компиляции на разных операционных системах, вам нужно использовать директивы препроцессора, которые позволяют включать или исключать определенные части кода в зависимости от условий компиляции.
Для языка программирования PHP, вы можете использовать директивы препроцессора, такие как
PHP_OSиPHP_VERSION, чтобы определить текущую операционную систему и версию PHP.Например, если вам нужно выполнить определенный блок кода только на Windows, вы можете использовать следующий код:
Если вам нужно выполнить определенный блок кода только на Linux, вы можете использовать следующий код:
Таким образом, вы можете легко разделять части кода для компиляции на разных операционных системах, используя директивы препроцессора в PHP. Не забудьте также учитывать различия в путях к файлам и другие особенности конкретных операционных систем при разработке приложений.