Dependencies 如何使SCON选择性地忽略与自定义生成器的依赖关系?

Dependencies 如何使SCON选择性地忽略与自定义生成器的依赖关系?,dependencies,scons,Dependencies,Scons,以下是我的项目的依赖关系结构: 有一个文件F,从中派生文件a、B和C。项目中的其他一切最终取决于A、B或C A、 B、B和C是使用如下自定义生成器生成的: ABCbuilder = Builder(action = build_abc) env = Environment(BUILDERS = {'abc' : ABCbuilder,...} env.abc([A,B,C],[F]) #scons includeF=1 问题是F很难处理,我希望在发行版中不包括它,只包括A、B和C 如果SCO

以下是我的项目的依赖关系结构:

有一个文件F,从中派生文件a、B和C。项目中的其他一切最终取决于A、B或C

A、 B、B和C是使用如下自定义生成器生成的:

ABCbuilder = Builder(action = build_abc)
env = Environment(BUILDERS = {'abc' : ABCbuilder,...}
env.abc([A,B,C],[F])
#scons includeF=1
问题是F很难处理,我希望在发行版中不包括它,只包括A、B和C

如果SCON在没有F的情况下出现,我如何使其接受A、B和C作为起始源?当前,如果我将A、B和C复制到一个不包含F的新目录中,它会尝试重建它们


我已经看了手册部分,但我不知道如何将其应用到我的代码中。

嗯,我想到了一个解决方法。 我制作了一个命令行变量,用于确定构建是否以F为根。 似乎有一种“斯科恩斯”的方法我不知道,但我认为这很好

do_abc = False
for key, value in ARGLIST:
    if key == "do_abc":
        do_abc = bool(value)

if do_abc:
    ABCbuilder = Builder(action = build_abc)
    env = Environment(BUILDERS = {'abc' : ABCbuilder,...}
    env.abc([A,B,C],[F])

else:
     env = Environment(BUILDERS = {...})

您可以在中找到有关Ignore()函数的详细信息。以下是手册页上的签名:

Ignore(target, dependency)
env.Ignore(target, dependency)
您应该能够执行以下操作:

# assuming aTarget, bTarget, cTarget, and F are set accordingly

Ignore(aTarget, F)
Ignore(bTarget, F)
Ignore(cTarget, F)
useF = ARGUMENTS.get('includeF', 0)
if not int(useF):
    Ignore(aTarget, F)
    Ignore(bTarget, F)
    Ignore(cTarget, F)
在SCON中处理命令行选项有几种不同的方法,概述如下:

最简单的方法是,允许您执行以下操作:

# assuming aTarget, bTarget, cTarget, and F are set accordingly

Ignore(aTarget, F)
Ignore(bTarget, F)
Ignore(cTarget, F)
useF = ARGUMENTS.get('includeF', 0)
if not int(useF):
    Ignore(aTarget, F)
    Ignore(bTarget, F)
    Ignore(cTarget, F)
命令行看起来像这样:

ABCbuilder = Builder(action = build_abc)
env = Environment(BUILDERS = {'abc' : ABCbuilder,...}
env.abc([A,B,C],[F])
#scons includeF=1

谢谢我试试看。遗憾的是,手册页的搜索有点麻烦,不像其他结构精美的文档。@L.AmberWilcox-O'Hearn Ya,我同意在手册页中搜索。但其他文档缺少手册页中的信息。