The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск ForgeZero 1.9.0, инструмента сборки для C и ассемблера

19.05.2026 06:38 (MSK)

Опубликован релиз ForgeZero 1.9.0 (fz), консольного инструмента сборки для проектов на языках C, C++ и ассемблере (NASM, GAS, FASM). Инструмент не требует создания Makefile или иных конфигурационных файлов для базового использования. Код проекта написан на языке Go и распространяется под лицензией MIT.

ForgeZero определяет тип файла и автоматически выбирает необходимый бэкенд. Каждый файл с кодом собирается в объектный файл, после чего выполняется проверка дублирующихся глобальных символов во всех объектах и осуществляется компоновка в единых исполняемый файл. Скомпилированные файлы кэшируются и повторно пересобираются только после внесения изменений в связанные с ними файлы с кодом. Возможно опциональное отслеживание изменений в ФС и пересборка после обновления файлов с кодом.

Поддерживаются компиляторы GCC, Clang, G++, Clang++; ассемблеры NASM, GAS, FASM; компоновщики LD, GCC, Clang; архиватор AR. Обязательные предупреждения для C и C++: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". По умолчанию включены санитайзеры AddressSanitizer и UndefinedBehaviorSanitizer (отключаются флагом -sanitize=false). Поддерживаются платформы Linux, macOS, Windows (WSL2 и экспериментально нативно).

Основные изменения в версии 1.9.0:

  • Добавлен флаг "-target" <triple>, позволяющий выполнять кросс-компиляцию для произвольной архитектуры при наличии соответствующего префиксного инструментария. fz самостоятельно определяет имена компилятора, компоновщика и архиватора по указанному идентификатору (например, "arm-linux-gnueabihf-gcc"). Поддерживаются любые стандартные целевые платформы GNU, в том числе arm-linux-gnueabihf, aarch64-linux-gnu и riscv64-linux-gnu.
  • Реализована поддержка поддержка протокола LSP (Language Server Protocol). Флаг "-compile-commands" генерирует файл compile_commands.json (Compilation Database) в корне проекта. Файл считывается языковыми серверами clangd и ccls, обеспечивая работу автодополнения, навигации по коду и диагностики в редакторах с поддержкой LSP (Neovim, VSCode, CLion, Emacs и др.).
  • Команда fz "-update" перед установкой новой версии теперь сохраняет текущий бинарный файл в /usr/local/bin/fz.old, что позволяет откатиться к предыдущей версии без переустановки.
  • Устранена ошибка, при которой в мультидиректорных проектах файлы с одинаковыми базовыми именами из разных подкаталогов перезаписывали объектные файлы друг друга. Имена объектных файлов теперь формируются на основе полного относительного пути к исходному файлу.
  • Реализован интерактивный режим "fz -shell" для сборки одиночных файлов.
  • Добавлено тестовое покрытие для команд SplitCommand, CmdSet и CmdBuild. Покрытие тестами пакета компоновщика увеличено с 17% до 60%, а покрытие всех пакетов превысило 40%.
  • Добавлен механизм подмены CheckTool для тестирования сценариев с отсутствующими компонентами тулчейна.

Изменения предыдущих выпусков:

  • В версии 1.8.0 реализована сборка статических библиотек (-type static / -lib), обеспечена уникальность имён объектных файлов в мультидиректорных проектах, исправлены ошибки в подсистеме сборки, связанные с обходом пути "..".
  • В версии 1.7.0 добавлена параллельная компиляция (-j N, 0 — автоопределение числа ядер), поддержка линкер-скриптов (-T) и адреса точки входа (-Ttext), интерактивный режим (fz -shell), явный выбор формата вывода (elf32, elf64, bin), компиляция файлов C++ (.cpp, .cc, .cxx) с теми же строгими флагами предупреждений, что и для C.
  • В версии 1.6.0 добавлены инициализация проекта (fz -init, создаёт .fz.yaml, .fzignore, README.md), поддержка формата bin (-format bin) для загрузчиков и прошивок, конфигурационные поля libs, flags.cc, flags.asm, flags.ld.
  • В версии 1.5.0 реализованы множественные директории источников (source_dirs), явные списки файлов (source_files), шаблоны include/exclude, поле libs для библиотек компоновщика, файл .fzignore, многоуровневое слияние конфигурационных файлов.


  1. Главная ссылка к новости (https://github.com/forgezero-c...)
  2. OpenNews: Обновление операционной системы MenuetOS 1.57.70, написанной на ассемблере
  3. OpenNews: Обновление ОС KolibriN 10.1 и MenuetOS 1.34, написанных на ассемблере
  4. OpenNews: Ассемблер занял десятое место в рейтинге популярности языков программирования
  5. OpenNews: asmttpd - http-сервер на ассемблере
Автор новости: alexvoste
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/65474-forgezero
Ключевые слова: forgezero, asm
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (38) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 07:13, 19/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Это замена утилите make?
     
     
  • 2.4, Олег (??), 09:04, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Похоже на то.
     
     
  • 3.37, Аноним (37), 11:47, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Они пытаются переизобрести Паскаль.
     
  • 2.12, Жироватт (ok), 09:40, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +8 +/
    ...и тут авторы ForgeZero нашли в связке make и любой программы, формирующей makefile ФАТАЛЬНЫЙ НЕДОСТАТОК - его писали не они! Для решения этой проблемы они создали ForgeZero (похожее на все сборочные системы, но другое), полностью исключающее Library (objectfile) Hell!...
     
     
  • 3.14, Аноним (14), 10:16, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • –3 +/
    О господи, всем наcpaть! (с)
    Ну написали и написали, чего такая тряска?

    make это просто древний копролит рассчитанный на престарелых луdduтов.

    А у нас вообще то СПО и делать кучу вариантов одного и того же - наоборот приветствуется.

     
     
  • 4.31, Аноним (31), 10:59, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >  и делать кучу вариантов одного и того же - наоборот приветствуется

    :))) Ну вот примерно поэтому "линукс-десктоп" - это такая эфемерная система, которая вроде бы есть, но в таком виде нафиг никому не нужна. Время "пусть распускаются тысячи цветов" в ИТ прошло примерно 20 лет назад - выжили те, кто реально хорошо делал свою задачу. Т.е. наступило время "собирать десятки плодов от тысяч цветов".

    ФОСС - он как бы приятная штука, ИГРУШКА для нубов, но для дела, для бизнеса такой подход "захотел - запилил ещё один редактор" - категорически не годится.

     
  • 2.13, Аноним (13), 10:06, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Инструмент не требует создания Makefile или иных конфигурационных файлов для базового использования.

    Открою секрет - для базового использования ни один инструмент не требует перечисленных вещей.

     
  • 2.23, xor2003 (?), 10:40, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Этот проект должен уметь генерить Makefile или cmake или ninja,
    Тогда будет круто
     

  • 1.3, Tron is Whistling (?), 08:22, 19/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    "в мультидиректорных проектах файлы с одинаковыми базовыми именами из разных подкаталогов перезаписывали объектные файлы друг друга"
    Дальше не читал, понятно, что уже не нужно, потому что изначально ногами делано.
     
  • 1.6, Олег (??), 09:06, 19/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Автор, санитайзеры по умолчанию лучше отключать - они существенно замедляют бинарник. Поэтому подобное умолчание может доставить неудобств.

    Я правильно понял, что подтягивания зависимостей нет?

     
  • 1.7, enep (ok), 09:07, 19/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Странно а чем не устроил тот же make синтаксис довольно простой
     
     
  • 2.8, Ананоним (?), 09:11, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Тем, что его нуджно написать, а это лень, неможно и немолодёжно. Когда есть инструмент "и так сойдёт", соблазн очень велик.
     
     
  • 3.43, Аноним (37), 11:58, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Тогда пусть возьмут Паскаль - его модульная система позволяет обходиться безо всяких Makefile.
     
  • 3.49, Аноним (49), 12:54, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Тем, что его нуджно написать, а это лень, неможно и немолодёжно.

    а, что деды не могли сделать интерактивную утилиту, которая задавая вопросы про включения тех или иных опций, выбора тех или иных файлов для компиляции и т.д. сохраняло бы выбранные параметры один раз и все, а дальше тупо запускай команду билд. Что таже самая ./configure не могла быть интерактивной? нет бл*ть надо --help прописать, час потратить на разбор выхлопа, потом руками прописать пяти строчный набор параметров командной строки сохранить его в текстовый файлик от греха подальше на будущее, ппц, а потом придумали якобы мейк для решения этой проблемы, а щас решают проблему мейка, а завтра будут решать проблему этого forgezero (даблфейспалм)

     
     
  • 4.50, Ананоним (?), 13:20, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >> Тем, что его нуджно написать, а это лень, неможно и немолодёжно.
    > а, что деды не могли сделать интерактивную утилиту, которая задавая вопросы про
    > включения тех или иных опций, выбора тех или иных файлов для
    > компиляции и т.д. сохраняло бы выбранные параметры один раз и все,
    > а дальше тупо запускай команду билд. Что таже самая ./configure не
    > могла быть интерактивной? нет бл*ть надо --help прописать, час потратить на
    > разбор выхлопа, потом руками прописать пяти строчный набор параметров командной строки
    > сохранить его в текстовый файлик от греха подальше на будущее, ппц,
    > а потом придумали якобы мейк для решения этой проблемы, а щас
    > решают проблему мейка, а завтра будут решать проблему этого forgezero (даблфейспалм)

    Люди очень часто решают несуществующие проблемы ради мифического удобства. А ещё большинство плодят ненужные сущности, вместо их сокращения. Так что относись к этому спокойно, суета никогда никуда не исчезнет вокруг, ты только можешь научиться всё делать оптимально для себя. И ничего плохого в записках нет, текстовый редактор и файл уже давно изобретены. А вот твой "интерактив" каждый раз это точно ненужная хрень. Но ты ещё этого не понял. Возможно ты жертва GUI и мышки.

     
  • 2.15, Аноним (14), 10:19, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Не знаю как в этой поделке, но у Make есть куча проблем и костылей.
    Начиная от рекурсивного make заканчивая просто угребищным Dependency Management по таймстемпу.

    Не зря многие проекты переехали на более современные тулы.

     
     
  • 3.19, edo (ok), 10:28, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Не зря многие проекты переехали на более современные тулы.

    а «более современные тулы» часто в итоге генерируют Makefile

     
     
  • 4.29, Аноним (31), 10:54, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Чушь. Зачем им собственноручно урезать собственные возможности??
     
     
  • 5.33, Сладкая булочка (?), 11:38, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Что значит урезать собственные возможности? Это метасистемы сборки, они не занимаются сборкой, а генерируют правила для систем сборки.
     
  • 3.32, Сладкая булочка (?), 11:36, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > просто угребищным Dependency Management по таймстемпу.
    > Не зря многие проекты переехали на более современные тулы.

    На ninja, у которой тоже зависимости по timestamp?)

     
     
  • 4.36, Аноним (36), 11:47, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > На ninja, у которой тоже зависимости по timestamp?)

    Или на Meson)
    Подходы разные, некоторые удачные, некоторые не очень.

    Но проблемы make оно ж не отменяет)


     
     
  • 5.42, Сладкая булочка (?), 11:56, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >> На ninja, у которой тоже зависимости по timestamp?)
    > Или на Meson)

    meson - мета-система. Они генерит make. Поэтому make разумно сравнивать с ninja.

    > Но проблемы make оно ж не отменяет)

    https://cdn.idaprikol.ru/images/668df9e987c85648d5f70a9adb20a1c418c4f3e30eabc4

     

  • 1.9, name (??), 09:34, 19/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Почему если проект на go, к нему сразу отношение как к мальчику в разноцветной кепочке с пропеллером..
     
     
  • 2.41, Соль земли2 (?), 11:54, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что он сделал домашнее задание.
     

  • 1.10, q (ok), 09:35, 19/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сабж явно предназначен для новых проектов. В то же время общая рекомендация такова, что новые проекты надо начинать на расте, а не си/плюсах. Так что сабж опоздал лет на 20.
     
     
  • 2.25, Аноним (31), 10:43, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    У вас в слове "расте" 15 ошибок, правильно писать D.
     
     
  • 3.47, Аноним (-), 12:32, 19/05/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.48, Аноним (48), 12:41, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Только Д лет 20 окончательно издох. 2 версия компилятора это какая-то шутка с рантаймом. Да и в целом, ощущение, что раст конкретно Д вполне заменят.
     
     
  • 3.52, Аноним (52), 13:26, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Может, какой-нибудь Rust_with_classes и с шаблонами, и заменит.
     

  • 1.20, Аноним (13), 10:29, 19/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Поддерживаются платформы Linux, ..., Windows

    У меня это кросс-компилятор делает. Пишу под Linux, а сборки для Windows уже даже не тестирую.

     
     
  • 2.35, Сладкая булочка (?), 11:41, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > а сборки для Windows уже даже не тестирую

    Садись, пять.

     
     
  • 3.44, Аноним (37), 12:01, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А я на Паскале делаю кросс под арм-телефонки. Мне тоже пятёрка будет?
     
     
  • 4.46, Аноним (46), 12:16, 19/05/2026 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
  • 4.51, Аноним (52), 13:21, 19/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А теперь перепиши на Brainfuck для смартфонов.
     

  • 1.34, Сладкая булочка (?), 11:40, 19/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Странный проект.

    Тащить go в тулинг для сборки c или с++ - оверкил для обычных проектов. Если вы крупная контора, делающся свою систему сборки - еще может быть. Но для обычных проектов есть устоявщиеся мета-системы сборки, есть conan. Им нет смысла переходить на новый инструмент.

     
  • 1.38, Аноним (38), 11:51, 19/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > написан на языке Go

    Чао!

     
  • 1.40, Соль земли2 (?), 11:53, 19/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не используй Make - это полное месиво.
    Используй Make - его хватит для большинства задач.
    Не используй CMake - это полное месиво.
    Используй CMake - его хватает в большинстве случаев.
     
  • 1.45, Аноним (46), 12:15, 19/05/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +1 +/
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру