如何设置禁止复制= 0所有SCons的建造变种没有选项多次重复?

问题描述 投票:3回答:1

我处理的是与SConscript(variant_dir=)创造了许多变种显示目录的项目。

我要让scons停止复制我的.c文件到构建目录。

我知道我能做到这一点,如果我通过duplicate=0为每个呼叫截至记载:https://scons.org/doc/2.4.1/HTML/scons-user.html#idp1378843980

但是,有没有使duplicate=0自动生效的所有变型迪尔斯更简单的方法?

例如,在一个简单的例子:

env = Environment()
objects = [env.Object('main.c')]
build_dir = 'build'
objects.extend(env.SConscript(
    os.path.join('lib', 'SConscript'),
    variant_dir=os.path.join(build_dir, 'lib'),
))
objects.extend(env.SConscript(
    os.path.join('lib2', 'SConscript'),
    variant_dir=os.path.join(build_dir, 'lib2'),
))
env.Program('main.out', objects)

我想这样做:

env = Environment(duplicate=0)

我不喜欢但是把它作为一个变量无处不在,因为人们可能会忘记早晚传递:

env = Environment()
objects = [env.Object('main.c')]
build_dir = 'build'
duplicate = 0
objects.extend(env.SConscript(
    os.path.join('lib', 'SConscript'),
    variant_dir=os.path.join(build_dir, 'lib'),
    duplicate=duplicate
))
objects.extend(env.SConscript(
    os.path.join('lib2', 'SConscript'),
    variant_dir=os.path.join(build_dir, 'lib2'),
    duplicate=duplicate
))
env.Program('main.out', objects)

这将是类似于--duplicate soft-copy,从而影响一气呵成的所有变种迪尔斯。

如果我有一个--duplicate none我可以在默认情况下,从我的脚本SetOption还设置它和一切都会好起来的。

https://pairlist4.pair.net/pipermail/scons-users/2018-December/007474.html

scons
1个回答
0
投票

你可以把从SCons环境继承了你自己的环境,覆盖所需的功能和别名它在你的SCons的文件。例如:

# MyEnvironment.py
import SCons
import SCons.Script.SConscript

class MyEnvironment(SCons.Environment.Environment):

    def VariantDir(self, variant_dir, src_dir, duplicate=0):
        print("Using my environment")
        super(MyEnvironment, self).VariantDir(variant_dir, src_dir, self.get('duplicate', duplicate))

    def _get_SConscript_filenames(self, ls, kw):
        print("Using my environment sconscript")
        kw['duplicate'] = self.get('duplicate', 0)
        return super(MyEnvironment, self)._get_SConscript_filenames(ls, kw)

现在,在您的SConstruct您导入自定义类和别名班级为SCons环境类:

from MyEnvironment import MyEnvironment as Environment
env = Environment(duplicate=0)
objects = [env.Object('main.c')]
build_dir = 'build'
objects.extend(env.SConscript(
    os.path.join('lib', 'SConscript'),
    variant_dir=os.path.join(build_dir, 'lib'),
))
objects.extend(env.SConscript(
    os.path.join('lib2', 'SConscript'),
    variant_dir=os.path.join(build_dir, 'lib2'),
))
env.Program('main.out', objects)
© www.soinside.com 2019 - 2024. All rights reserved.