如何告诉 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 的内容将是您的源目录,而不是您断言不会更改的第三方目录。
请注意,以任何方式更改编译命令的命令行(除非参数包含在 $( $))
中将导致您的源文件重新编译。
我的 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 的内容将是您的源目录,而不是您断言不会更改的第三方目录。
请注意,以任何方式更改编译命令的命令行(除非参数包含在 $( $))
中将导致您的源文件重新编译。