Scons-使用带有Scons缓存的自定义预处理器
Scons - using custom preprocessor with scons cache
我目前正在尝试围绕Scons构建一个系统,该系统将使用Boost Wave驱动程序作为自定义C++代码预处理器。经过预处理后,使用MSVC对代码进行编译。目前,我从Sconscript文件中为Scons看到的每个源文件启动wave。这是可行的,但有一个问题——它非常慢,因为它没有利用Scons编译缓存。
您建议如何将自定义预处理步骤集成到SCons构建系统中,以使用编译缓存的方式?显然,我还需要适当的#include依赖项扫描、并行编译等。我对SCons没有太多经验,所以我正在寻找一个能为我指明正确方向的人。
我目前的两个研究领域是:
- 找到一些手动调用放入/检索缓存函数的方法,但这是有风险的——我不想用无效条目污染缓存
- 创建一个自定义工具/pudobuilder/something,这将允许我执行两个命令。或者试着用两种工具/伪构建器制作烤饼。这似乎很复杂
- Tom Tanner的答案,似乎是#include依赖关系没有被正确检测到
要使用scons缓存,必须有一个目标。scons根据贡献的文件和build命令缓存目标。
即使没有构建器,您也可以为自己编写一个类似这样的命令处理器。
out_cc = env.Command('file.wave.cpp', 'file.cpp', 'wave command < $SOURCE > $TARGET')
env.Program('myprog', ['this.cc', 'that.cc', out_cc])
这将使用缓存。
如果你愿意,你可以添加一个构建器,所以你可以一步到位。构建器非常适合在多个地方使用同一命令,或者具有比简单命令更复杂的需求。然而,它们对于缓存的工作来说并不是必不可少的。
编辑:更新后包含了liosan的解决方案,用于获取.cpp文件和生成.cpp文件,从而获得正确的include依赖项。我渴望名誉…
相关文章:
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 导致编译错误的自定义预编译标头
- 引发异常并直接结束程序的自定义异常处理
- 带有__PRETTY_UNCTION_的自定义错误处理程序
- Visual Studio 2015-用GIT分支和GIT提交定义预处理变量
- G++ 自定义异常处理程序
- 预处理之后和使用CMake编译之前的自定义构建步骤
- 如何在自定义信号处理程序中以编程方式获取sigterm的默认行为
- 预处理一个自定义文本文件,以使用Boost Spirit删除注释
- 如何在Qt中添加自定义类处理功能
- 使用带有Eigen库的自定义新处理程序
- cocos2d-js:C++中的自定义触摸处理程序
- boost asio自定义分配器处理程序io服务编译后错误
- Scons-使用带有Scons缓存的自定义预处理器
- 具有OpenCV调试模式的自定义信号处理程序
- COM c++中的自定义事件处理
- 如何使用自定义预处理与Eigen
- 这是实现自定义事件处理程序的正确方法吗?
- 可视化 在 C++ 中使用自定义速率处理创建更新方法
- 在 VC++ 2010 中使用 MSBuild 对文件执行自定义预处理