C++ 我可以使用SCons别名来选择要运行的SConscripts吗?

C++ 我可以使用SCons别名来选择要运行的SConscripts吗?,c++,scons,C++,Scons,我正在使用SCON构建一个非常大的项目,其中包含许多可构建的子项目。我可以很容易地使用关键字命令,如scons group=ai,用if语句构建ai子项目(根据关键字命令选择正确的SConscripts),但我希望让其他人尽可能容易地使用scon。理想情况下,我希望这样使用它:sconsai来构建ai组件。但是,到目前为止,我在SCons中发现的唯一一个单词命令功能是别名,所有示例都是关于更改目标的。这不是我想要的。因为我有一个非常大的项目,有多个子SConscript文件来构建子项目,所以我想

我正在使用SCON构建一个非常大的项目,其中包含许多可构建的子项目。我可以很容易地使用关键字命令,如
scons group=ai
,用if语句构建ai子项目(根据关键字命令选择正确的SConscripts),但我希望让其他人尽可能容易地使用scon。理想情况下,我希望这样使用它:
sconsai
来构建ai组件。但是,到目前为止,我在SCons中发现的唯一一个单词命令功能是别名,所有示例都是关于更改目标的。这不是我想要的。因为我有一个非常大的项目,有多个子SConscript文件来构建子项目,所以我想有选择地调用SConscripts。我尝试过这样的代码:

env.Alias("ai", SConscript("ai/SConscript", 'env'))

但无论我使用的是“AI”别名还是其他别名,每次都会调用AI SConscript。有人知道是否可以通过这种方式使用别名,根据别名有选择地调用SConscripts吗

如您所述,
Alias()
函数仅用于目标。我可以想出两种方法来解决这个问题

对于具有不同目标的同一别名,可以多次调用Alias(),因此可以对每个SConscript中的所有目标调用Alias(),然后可以在一个SConscript中构建所有内容。这里有一个例子来说明我的意思:

ai/SConscript:

# targets, etc

env.Alias("ai", target1)
env.Alias("ai", target2)
...
env.Alias("ai", targetn)

另一种选择是在根SConstruct中放入一些逻辑,这样它就只根据命令行参数调用子项目SConscript。此选项要求您使用以下形式的命令行参数:
group=ai

谢谢您的回答。我对Scons的工作原理有一个很大的误解,这帮助我解决了这个问题。现在使用您发布的第一个解决方案。您知道我是否可以以某种方式将这些别名放入顶级SConscript中吗?我试着移动它们并改变路径以适应新的位置,但现在scons认为一切都是最新的…@Darkhydro,你的意思是想在顶级SConstruct中定义这些别名吗?是的,这是可以做到的,但您需要访问那里的目标才能做到这一点。这可能导致一个不同的问题,但是考虑将目标列表从ScScript()调用返回到根级结构,并在其中创建别名。如果您想包含所有的依赖项,那么就必须针对可执行文件(而不是源文件),这大大简化了这个问题。我的顶级别名结构现在运行得很好。谢谢你的帮助@Darkhydro,很乐意帮忙:)