2
当Sconstruct文件本身更改时,是否有任何方法可以使scons强制生成所有目标?强制scons使用Sconstruct文件作为全局依赖关系
(推理是,如果我改变构建设置,我可以不依赖于先前建立文件与新的构建设置一致)
当Sconstruct文件本身更改时,是否有任何方法可以使scons强制生成所有目标?强制scons使用Sconstruct文件作为全局依赖关系
(推理是,如果我改变构建设置,我可以不依赖于先前建立文件与新的构建设置一致)
如果您需要将SConstruct添加为一个的依赖的目标,那么要么你做错了,要么SCons有bug。
例如,如果我们正在讨论编译标志。假设你想从-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应该重建......不知道它是如何做到的。 – 2009-09-17 13:50:44
我相信在.sconsign.dblite缓存文件中存储上一次的命令行作为散列的一部分。 – richq 2009-09-17 14:39:31
呵呵,我只是试着改变我设置的一个新项目的-O级别,并且它能够正确重建。不知道我的其他项目有什么问题。 – 2009-09-17 14:53:56