首先,我有这样的SConstruct文件:
Object('a.s')
Program('mya','a.o')
我运行scons,它会产生' mya'。好。然后我将我的SConstruct改为:
Object('a.s',CCFLAGS='-DHello')
Program('mya','a.o')
再次运行scons。什么都没做:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
scons: done building targets.
这对我来说很奇怪。当我使用make或msbuild系统时,无论何时在项目配置文件中进行了更改,都会有重建。这是默认规则。
但似乎scons的规则是不同的,这是设计的吗?只有在源文件更改时才会触发重建?如果这是设计,我认为有一个缺陷,当编译/链接器选项更改时,目标文件应该是不同的,因此,应该触发重建,对吧?
我的理解是不正确的,还是我还需要了解一些特殊要点? 非常感谢。
答案 0 :(得分:3)
直接引用您的上一段,并根据您的最后三个问题(Using 'LIBS' in scons 'Program' command failed to find static library, why?和When changing the comment of a .c file, scons still re-compile it?及此一个)及其深度,是的,似乎您有很多事情要做不了解SCons。
因此,请按照后面的步骤阅读MAN page和UserGuide。您可能还想稍微调低一下,而不是质疑它的设计或声称似乎存在一个"缺陷"做功课(另见How To Ask Questions The Smart Way)。
当你打电话给" scons -c
"然后是" scons
"你应该看到" -DHello
"不会出现在命令行中,即使" a.o
"得到重建。变量$CCFLAGS
不用于编译汇编程序文件,但是$ASFLAGS
是......而在设置它时,您确实应该立即看到重建,而不编辑源文件。