gpt4 book ai didi

c++ - Scons - 使用带有 scons 缓存的自定义预处理器

转载 作者:行者123 更新时间:2023-11-30 02:53:06 27 4
gpt4 key购买 nike

我目前正在尝试围绕 Scons 构建一个构建系统,它将使用 Boost Wave 驱动程序作为自定义 C++ 代码预处理器。预处理后代码用 MSVC 编译。目前,我从 Sconscript 文件中为 Scons 看到的每个源文件启动 wave。这可行,但有一个问题——它很慢,因为它没有利用 Scons 编译缓存。

您建议如何以使用编译缓存的方式将自定义预处理步骤集成到 SCons 构建系统中?显然,我还需要适当的 #include 依赖项扫描、并行编译等。我对 SCons 不是很有经验,所以我正在寻找能为我指明正确方向的人。

我目前的两个研究领域是:

  • 寻找一些方法来手动调用放置/检索缓存函数,但这是有风险的 - 我不想用无效条目污染缓存。
  • 创建一个自定义工具/伪构建器/某物,这将允许我执行两个命令。或者尝试让 scons 使用两个工具/伪构建器。这看起来很复杂。
  • Tom Tanner 的回答,似乎没有正确检测到#include 依赖项。

最佳答案

要使用 scons 缓存,您必须有一个目标。 scons 根据提供的文件和构建命令缓存目标。

即使没有构建器,您也可以像这样为自己编写一个命令处理器。

out_cc = env.Command('file.wave.cpp', 'file.cpp', 'wave command < $SOURCE > $TARGET')
env.Program('myprog', ['this.cc', 'that.cc', out_cc])

这将使用缓存。

您可以根据需要添加构建器,这样您就可以一步完成。构建器非常适合您将在多个地方使用相同命令或具有比简单命令描述更复杂的要求的情况。但是,它们并不是缓存工作所必需的。

编辑:更新以包含 liosan 的解决方案,用于 wave 获取 .cpp 文件并生成 .cpp 文件,从而获得正确的包含依赖项。渴望名誉,我...

关于c++ - Scons - 使用带有 scons 缓存的自定义预处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18270827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com