2009-09-16 108 views

回答

3

如果您需要将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不重建我的目标,即使我改变了命令行选项?”。无论哪种方式,您可能需要考虑所涉及的真实依赖关系,而不是添加一个人为的尝试和强制重建。

+0

-O级别的变化正好与我正在处理的一样。没有意识到scons应该重建......不知道它是如何做到的。 – 2009-09-17 13:50:44

+1

我相信在.sconsign.dblite缓存文件中存储上一次的命令行作为散列的一部分。 – richq 2009-09-17 14:39:31

+0

呵呵,我只是试着改变我设置的一个新项目的-O级别,并且它能够正确重建。不知道我的其他项目有什么问题。 – 2009-09-17 14:53:56