Иван Денисов писал(а):
Удалил папку - нет подсистемы.
дык подархитектуры менеджерятся точно таким же образом.
Иван Денисов писал(а):
Поэтому выделение хоста в отдельную директорию для каждой отдельной системы создаёт прозрачность как пакетного конфигурирования, так и процесса сборки приложения.
в вашем варианте невозможно собрать под все архитектуры в одном каталоге. потому что давайте вернёмся к моему любимому примеру Mysql-драйвера хотя бы: там разные импорты для разных архитектур. а мы складываем собраные объекты и символьники в один и тот же каталог. всё, удобство кончилось, начались пляски с селекторами и запоминанием, под какую же архитектуру мы собирали в последний раз. конечно, это можно решить /USE-параметрами… или как у меня, одним коммандером: `DevCompiler.SetCrossArch Name`. в моём случае можно (и я так делаю) держать собраными все бинари для всех архитектур. и селекторов для мускуль-драйвера не надо (я их все там поубирал). по-моему, это намного прозрачней, чем оные селекторы. и, кстати, все инструменты сборки всегда в курсе, под что мы собираем — это может понадобиться в написании тулзов.
собственно, я из LinGtk сейчас компиляю LinX11 как раз через такой коммандер.
кстати, когда появятся компиляторы под другие аппаратные архитектуры — я просто обучу SubsManager, где должны быть символьники и объектники для каждого CPU, и всё. сейчас я этого не сделал потому что не надо, но механизм позволяет: правим одно место, вся остальная система в правках не нуждается. и никогда-ни-за-что не возникнет никакой путаницы типа попыток загрузить объект/символы для неподходящего CPU.
Иван Денисов писал(а):
Нет никаких переменных окружения, нет никаких опций сборщика или компилятора — только названия модулей.
но ведь есть! см. мускуль-драйвер.
с точки зрения высокоуровневого разработчика в моём варианте меняется ровно ничего: собраная система знает свою архитектуру. более того: высокоуровневый разработчик может просто запустить команду общей пересборки среды — и эта команда одна на все архитектуры. обычное `DevCompiler.CompileSubs` — она сама разберётся дальше. `DevCompiler.SetCrossArch` не нужен, если целевая архитектура совпадает с нативной.
как я где-то писал уже, SubsManager в итоге показывает остальной системе отображение документов, подходящих для текущей архитектуры, из множества «все доступные документы». с точки зрения «вне BBCB» управление происходит не сложнее, чем было: удалили подсистему — её нет. зашли в каталог подсистемы, удалили Mod/Lin, Mod/Rsrs — всё, архитектурной части для Lin нет. по-моему, никакой менеджер пакетов тут всё ещё не нужен.
Борис Рюмшин писал(а):
Однако, я пока проголосую за отдельные подсистемы для разных архитектур. Да, больше каталогов, но на такой случай можно предложить решение.
у меня с этим была ещё одна проблема, чисто эстетическая: хост-подсистемы ничем не отличаются от других, хотя по сути принадлежат к совсем иному уровню. это был ещё один стимул изолировать их все в рамках Host. как раз по тому принципу, который я выше описал: «ниже ватерлинии» у нас получился не монолит, а тоже система с подсистемами, в роли которых теперь выступают архитектуры.
Борис Рюмшин писал(а):
Кстати, учитывая замечания arisu, можно вполне развести по подсистемам графические и не графические части хоста. Сам думал о таком.
ещё больше подсистем в корне наплодится. ;-)
p.s.: я так упорно ною потому что мне кажется, что я очень плохо пояснил свою идею, и её до конца не понимают. ну, или просто потому, что считаю свой вариант более удобным не в ущерб простоте, и хочу всех в этом убедить, тоже может быть. ;-)