我处理的是与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环境继承了你自己的环境,覆盖所需的功能和别名它在你的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)