Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scons-使用自定义预处理器和Scons缓存 我目前正在尝试围绕SCONS构建一个构建系统,它将使用Boost Wave驱动程序作为一个自定义的C++代码预处理器。经过预处理后,用MSVC编译代码。此时,我从Sconscript文件中为Scons看到的每个源文件启动wave。这是可行的,但也有一个问题——速度相当慢,因为它没有利用Scons编译缓存_C++_Python_Scons_C Preprocessor_Wave - Fatal编程技术网

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

Scons-使用自定义预处理器和Scons缓存 我目前正在尝试围绕SCONS构建一个构建系统,它将使用Boost Wave驱动程序作为一个自定义的C++代码预处理器。经过预处理后,用MSVC编译代码。此时,我从Sconscript文件中为Scons看到的每个源文件启动wave。这是可行的,但也有一个问题——速度相当慢,因为它没有利用Scons编译缓存,c++,python,scons,c-preprocessor,wave,C++,Python,Scons,C Preprocessor,Wave,您建议如何以使用编译缓存的方式将自定义预处理步骤集成到SCons构建系统中?显然,我还需要适当的#包括依赖项扫描、并行编译等。我对SCON不是很有经验,所以我正在找人为我指明正确的方向 我目前的两个研究领域是: 找到一些手动调用put/retrieve缓存函数的方法,但这是有风险的——我不想用无效条目污染缓存 创建一个自定义工具/pseudobuilder/something,允许我执行两个命令。或者尝试让SCON使用两种工具/伪构建器。这似乎很复杂 Tom Tanner的答案似乎受到了“包括

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

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

  • 找到一些手动调用put/retrieve缓存函数的方法,但这是有风险的——我不想用无效条目污染缓存
  • 创建一个自定义工具/pseudobuilder/something,允许我执行两个命令。或者尝试让SCON使用两种工具/伪构建器。这似乎很复杂
  • Tom Tanner的答案似乎受到了“包括未正确检测到的依赖项”的影响

要使用scons缓存,必须有一个目标。scons根据贡献文件和生成命令缓存目标

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

out_cc = env.Command('file.wave.cpp', 'file.cpp', 'wave command < $SOURCE > $TARGET')
env.Program('myprog', ['this.cc', 'that.cc', out_cc])
out\u cc=env.Command('file.wave.cpp','file.cpp','wave Command<$SOURCE>$TARGET')
环境程序('myprog',['this.cc','that.cc',out\u cc])
这将使用缓存

如果愿意,您可以添加一个生成器,这样您就可以一步完成。构建器非常适合在多个位置使用同一命令,或者具有比简单命令更复杂的需求。但是,它们不是缓存工作所必需的


编辑:更新为包含liosan的wave taking.cpp文件和生成.cpp文件的解决方案,从而获得正确的包含依赖项。我渴望得到声誉……

看起来很有希望,我正在调查。但是SCons怎么知道它应该编译预处理的文件呢?嗯,也许我没有正确地阅读它,但是在我将您的代码片段应用到我们的构建系统中之后,我得到了一个错误,大意是“我不知道如何处理“X.wave”文件,意外的扩展名“wave”…我实际上使用了env.Command('out.cpp.wave','out.cpp',…),这就解释了。目前,我使用env.Command('out.cpp.cpp','out.cpp',…)使您的解决方案正常工作,这是可以接受的,即使不是完美的。我有没有办法让SCON知道“.wave”文件和“.cpp”文件一样?不幸的是,我发现这个解决方案没有检测到更改的隐式依赖项:((意思是#包含文件)。所以它没有用(意思是需要更多的研究)当然,如果wave文件有一个cpp扩展名,这将是相当困难的。你必须写一个扫描器(或者至少告诉SCons它需要在wave文件上使用C扫描器)。