【问题标题】:When I change SConstruct file, scons doesn't trigger rebuild?当我更改 SConstruct 文件时,scons 不会触发重建?
【发布时间】:2016-10-03 12:41:41
【问题描述】:

首先,我有这样的 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 系统时,只要项目配置文件中的 argumenet 发生更改,就会进行重建。这是默认规则。

但似乎scons的规则不同,这是设计的吗?只有当源文件更改时才会触发重建?如果这是设计,我认为当编译/链接器选项更改时,目标文件应该不同,因此应该触发重建,对吗?

是我的理解有误,还是 scons 中的一些特殊点我还需要了解? 非常感谢。

【问题讨论】:

  • 旁白:没有我用过的make 有这个功能。事实上,这个特性是 SCons 相对于 make 的优势之一。

标签: linux triggers scons rebuild


【解决方案1】:

直接参考您的最后一段,并根据您的最后三个问题(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 s The Smart Way)。

当您调用“scons -c”后跟“scons”时,您应该看到“-DHello”没有出现在命令行中,即使“a.o”被重建.变量$CCFLAGS 不用于编译汇编程序文件,但$ASFLAGS 是......并且当设置它时,您确实应该立即看到重建,而无需编辑源文件。

【讨论】:

  • 您的前两段是评论,而不是正确答案的一部分。是的,它们是有效的 cmets,但仍然是 cmets。请考虑将它们从您的答案中移出并放入评论中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 2023-04-02
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多