【问题标题】:force scons to use Sconstruct file as a global dependency强制 scons 使用 Sconstruct 文件作为全局依赖项
【发布时间】:2010-11-28 23:02:00
【问题描述】:

当 Sconstruct 文件本身发生变化时,有什么方法可以让 scons 强制构建所有目标?

(原因是如果我更改构建设置,我不能依赖以前构建的文件来与新的构建设置保持一致)

【问题讨论】:

    标签: scons


    【解决方案1】:

    如果您需要将 SConstruct 添加为您的目标之一的依赖项,那么要么您做错了,要么 SCons 中存在错误。

    例如,如果我们谈论的是编译标志。假设您想从 -O0 更改为 -O2。在最简单的情况下,您会:

    env = Environment(CCFLAGS = '-O0')
    env.Program(target = 'foo', source = 'foo.c')
    

    您运行 scons,它将 foo.c 编译为 foo.o 并从中创建 foo(.exe)。如果您将其更改为:

    env = Environment(CCFLAGS = '-O2')
    env.Program(target = 'foo', source = 'foo.c')
    

    然后 scons 将重建所有在 env 中定义的目标。这是因为命令行是目标的隐式依赖项。所以改变CCFLAGS会改变依赖值,这将重建“foo”目标。

    也许您真正的问题更像是“即使我更改了命令行选项,为什么 scons 不重建我的目标?”。无论哪种方式,您可能都需要考虑所涉及的真正依赖关系,而不是添加人为的依赖关系来尝试强制重建。

    【讨论】:

    • -O 级别的变化恰好是我正在处理的。没有意识到 scons 应该重建......不确定它是如何做到的。
    • 我相信 .sconsign.dblite 缓存文件将上次的命令行存储为哈希的一部分。
    • 嗯,我刚刚尝试在我设置的新项目上更改 -O 级别,它确实可以正确重建。不知道我的其他项目出了什么问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    相关资源
    最近更新 更多