如何告诉 SCons 停止计算特定目录中的隐式依赖项?

How to tell SCons to stop computing implicit dependencies in a particular directory?

我的 SCons 项目依赖于很多第三方库,每个库都提供数十或数百个包含文件。

我对 SCons 工作原理的理解是,在每次构建时,它都会解析我项目的源文件以查找 #include 指令,并使用 env['CPPPATH'] 的值来查找这些文件并计算它们的 md5 总和。

这种扫描的成本很高,因此我想通过教 SCons 我的第三方文件的所有 headers 永远不会改变来优化这个过程。 属性 实际上是由管理我们的第三方库的工具强制执行的。

我知道有一个 --implicit-deps-unchanged 选项强制 scons 假设隐式依赖关系没有改变,但它在全球范围内有效。我没有找到将此选项限制到特定目录的方法。我试图查找是否可以配置隐式 C++ 文件的默认 Scanner,但一无所获。我认为可以避免使用CPPPATH,而是直接将-I选项给编译器,但是很麻烦。

有什么方法可以通过教他目录中的文件永远不会改变来优化 SCons 吗?

您可以尝试将头文件路径列表预扩展到 CCFLAGS 中。 请注意,这样做意味着它们不会被扫描。

for i in list_of_third_party_header_directories: 
  env['CCFLAGS'].append('-I' + i)

在这种情况下,CPPPATH 的内容将是您的源目录,而不是您断言不会更改的第三方目录。

请注意,以任何方式更改编译命令的命令行(除非参数包含在 $( $)) 中将导致您的源文件重新编译。