- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在处理一个项目,该项目有许多使用 SConscript(variant_dir=)
创建的变体目录。
我想让 scons
停止软链接(soft link)/硬链接(hard link)/将我的 .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)
关于scons - 如何为所有 SCons 构建变体设置重复=0,而无需在每个 SConscript 调用上多次重复该选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53656787/
目前,我正在尝试将一个百万 sloc 遗留项目从乏味的 .cmd 脚本移植到 SCons。其中一部分是VC++,其他是Delphi。为 C++ 片段创建 SConscript 是一件轻而易举的事。 为
我有一个 SConscript,它被复制到构建目录 (variant_dir = ...) 进行构建。作为 not being able to express dependencies 的解决方法,我
我正在使用 scons 来编译我的项目。在我的项目中,源文件位于不同的目录中。我们是否需要在每个目录中都有 sconscript 文件来编译这些项目源文件? 我试图用单个 sconscript 文件编
我在网上找不到任何信息,所以我恳请您提供一个。 我已经正确设置了构建环境, 我的编译器是来自 VS Express 包的“cl”。 我尝试构建静态库, 当我将我的工具设置为“默认”时,一切正常,但当我
我正在尝试编写一个 SConscript 文件,以便我可以使用 scons 构建 Go 代码。 SConscript 文件非常简单;它只是一个入门文件: def gc(source, target,
作为 scons 的新手,我面临着使用通用顶级构建在一个存储库中转换具有多个模块的项目。每个模块已经有一个 SConstruct 文件 - 允许自己构建它们。 阅读分层 scons 设置,我发现这个想
我刚开始看scons 我创建了一个简单的test.cpp #include int main(int argc, char ** argv) { std::cout >& std::__1
我正在尝试使用 scons 构建工具构建一个简单的打印 HelloWorld。 我的 helloWorld.c 文件包含: #include "stdio.h" int main() { printf
我正在使用 SCons 构建一个非常大的项目,其中包含许多可构建的子项目。我可以轻松地使用关键字命令,如 scons group=ai 来构建带有 if 语句的 AI 子项目(根据关键字命令选择正确的
我需要使用 scons 为大型项目生成发布和调试版本。对于发布和调试版本,它都会生成共享和静态库。构建后目录结构应如下所示: project_dir/ |_ src |_ include
我是 SCons 的新手,注意到当我在 SConscript 中构建共享库时,CCCOMSTR 和 LINKCOMSTR 将不起作用。 这是我的 SConstruct 的简化版本: CFLAGS =
我正在处理一个项目,该项目有许多使用 SConscript(variant_dir=) 创建的变体目录。 我想让 scons 停止软链接(soft link)/硬链接(hard link)/将我的 .
我的构建结构如下: SConstruct subdir/SConscript subdir/module/__init__.py SConstruct调用 subdir/SConscript作为子公司
我是一名优秀的程序员,十分优秀!