在Build目录中输出SCons

时间:2011-10-09 17:10:32

标签: scons

我正在尝试修改我的SCons文件,以便将生成的文件放入 build 目录中。最初我虽然 VariantDir 可能是一个选项,但从我阅读的所有内容和它不符合我想要的例子来判断。

有没有简单的方法强制SCons将输出放在某个目录中而不必重写所有的源代码和脚本?

4 个答案:

答案 0 :(得分:3)

在与VariantDir挣扎了一段时间后(它根本没有做任何事情),我最终在顶级SConscript调用中使用variant_dir参数,这导致所有下游构建输出以并行方式结束建造'树: SConscript(['subdirs/SConscript'], variant_dir='build', duplicate=0) 我的构建结构是子目录/子子目录等中SConscripts的层次结构。通过此调用,输出最终在构建/子子目录中与它们在源中相同的级别。

这会占用一个级别,但是(子),并且使用“../build”没有帮助。解决方案是让SConscript文件与SConstruct处于同一级别并调用SConscript(['SConscript'], variant_dir='build', duplicate=0)

另请参阅Force Scons output (exe, obj, lib & dll) to specific build directory - 它有类似的答案

答案 1 :(得分:0)

面对类似的挫折,我添加了一个site_scons,它添加​​了替换构建器(例如“Exe”而不是“Program”),并为该构建器指定了一个用构建目录替换路径部分的发射器。这需要在整个SConscripts中使用备用构建器。

或者,您可以尝试子类化Environment并重写主目标以使用目标重写。然后将环境指定为默认值(修改Scons.Script.DefaultEnvironment或类似的东西)。这种方法使SConscripts保持静态,但是随着时间的推移变得非常混乱并需要更多的维护。

答案 2 :(得分:0)

VariantDirduplicate=0一起使用应该有效。

答案 3 :(得分:0)

您可以在目标输出上使用Install或InstallAs。它对我有用。

lib = env.SharedLibrary(target = "some_target", source = sources);
env.InstallAs( target = "folder/output_name.ext", source = lib );