首先,我有这样的sconstruct文件:

Object('a.s')
Program('mya','a.o')

我运行scons,它生成“mya”。好啊。然后我把结构改成:
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系统时,只要项目配置文件中的argumenet发生更改,就会进行重新生成。这是默认规则。
但似乎斯科斯的规则是不同的,这是故意的吗?仅当源文件更改将触发重新生成时?如果这是设计,我认为有一个缺陷,当编译/链接器选项更改时,目标文件应该不同,因此,应该触发重建,对吗?
我的理解是错误的,还是scons中有一些特殊的地方我还需要知道?
谢谢。

最佳答案

直接参考你的最后一段,根据你的最后三个问题(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 pageUserGuide。你可能还想把语气放低一点,而不是质疑它的设计或声称在做作业时似乎有一个“缺陷”(另见How To Ask Questions The Smart Way)。
当您调用“scons -c”后跟“scons”时,您应该会看到“-DHello”不会出现在命令行中,即使“a.o”已重建。变量$CCFLAGS不用于编译汇编程序文件,但$ASFLAGS是…在设置它时,您确实应该立即看到重建,而不必编辑源文件。

关于linux - 当我更改SConstruct文件时,scons不会触发重建吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39831937/

10-13 04:12