Build 目录中的 SCons 输出

发布于 2024-12-08 16:26:20 字数 183 浏览 0 评论 0原文

我正在尝试修改我的 SCons 文件,以便它们将生成的文件放入 build 目录中。最初,我认为 VariantDir 可能是一个选项,但从我读到的所有内容和示例来看,它并没有达到我想要的效果。

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

I'm trying to modify my SCons files so that they put the generated files into a build directory. Initially I though VariantDir could be an option but judging from all I read and the examples it does not do what I want.

Is there any easy way to force SCons to put the output in a certain directory without having to rewrite all the sources and scripts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

花开半夏魅人心 2024-12-15 16:26:20

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

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

另请参阅强制 Scons 输出(exe、obj、lib 和 dll)到特定的构建目录 - 它有类似的答案

After struggling with VariantDir for a while (it wasn't doing anything at all), I ended up using variant_dir parameter in the top level SConscript call, which causes all downstream build outputs end up in a parallel 'build' tree:
SConscript(['subdirs/SConscript'], variant_dir='build', duplicate=0)
My build structure is a hierarchy of SConscripts in subdirs/sub-subdirs, etc. With this call the outputs end up in build/sub-subdirs at the same level as they would in the source.

This eats up one level, though (subdirs), and using "../build" does not help. The solution is to have a SConscript file at the same level as SConstruct and call SConscript(['SConscript'], variant_dir='build', duplicate=0)

See also Force Scons output (exe, obj, lib & dll) to specific build directory - it has a similar answer

知你几分 2024-12-15 16:26:20

VariantDirduplicate=0 一起使用应该可以。

Using VariantDir with duplicate=0 should work.

尴尬癌患者 2024-12-15 16:26:20

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

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

Facing similar frustration, I added a site_scons that added replacement builders (e.g. "Exe" instead of "Program") and specified an emitter for that builder that replaced the path portion with the build directory. This requires the use of the alternate builder throughout your SConscripts though.

Alternatively you could try to subclass Environment and rewrite the main targets to use target rewrites. Then you specify your Environment as the default (modifying Scons.Script.DefaultEnvironment or something like that). This approach kept the SConscripts static but got very messy and requires more maintenance over time as scons internals change.

拥抱我好吗 2024-12-15 16:26:20

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

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

You might use Install or InstallAs on target output. It works for me.

lib = env.SharedLibrary(target = "some_target", source = sources);
env.InstallAs( target = "folder/output_name.ext", source = lib );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文