Я использую SCons для создания очень большого проекта со множеством сборочных подпроектов. Я могу легко использовать ключевые команды, такие как scons group=ai
для создания подпроектов AI с помощью операторов if (выбирая правильные SConscripts на основе команды ключевого слова), но я хочу, чтобы другие могли как можно проще использовать scons. В идеале я хотел бы использовать это так: scons ai
построить компоненты AI. Тем не менее, единственная функциональность с одним словом, которую я нашел в SCons, это псевдонимы, и все примеры касаются изменения цели. Это не то, что я хочу. Поскольку у меня есть очень большой проект с несколькими вложенными файлами SConscript для создания подпроектов, я хочу вызывать SConscripts избирательно. Я пробовал код так:
env.Alias("ai", SConscript("ai/SConscript", 'env'))
но это вызывает AI SConscript каждый раз, независимо от того, использую ли я псевдоним «ai» или другой. Кто-нибудь знает, возможно ли использовать псевдонимы таким образом, чтобы выборочно вызывать SConscripts на основе псевдонима?
Как вы упомянули, Alias()
Функция используется только для целей. Я могу придумать 2 способа решить эту проблему
Псевдоним () может вызываться несколько раз для одного и того же псевдонима с разными целями, поэтому вы можете вызывать его для всех целей в каждом SConscript, затем вы можете построить все в SConscript. Вот пример того, что я имею в виду:
AI / SConscript:
# targets, etc
env.Alias("ai", target1)
env.Alias("ai", target2)
...
env.Alias("ai", targetn)
Другой вариант — поместить некоторую логику в корневой SConstruct, чтобы он вызывал только подпроект SConscript, основанный на аргументе командной строки. Эта опция потребует от вас использовать аргумент командной строки этой формы: group=ai
Других решений пока нет …