在SCons中,我有一个生成未知数量文件的预构建步骤。一旦这些文件被生成,我需要能够将cpp文件添加到我的源列表中。我对SCons绝对是个初学者,我不知道该走什么样的路。最好的方法是什么?在
原创: 基本/原始构建步骤如下:
fpmFile = Dir('#').Dir('src').entry_abspath("FabricKINECT.fpm.json")
# The next step generates a bunch of source files
cppHeader = env.Command(
[env.File(target + '.h')],
klSources,
[[kl2edkBin, fpmFile, "-o", hdir, "-c", cppdir]]
)
env.Depends(cppSources, cppHeader)
# We pass in the supplied filelist to the build command
# however, this list does not include the cpp files generated above
# Currently I am hard-coding the generated files into
# the cppSources list, but I want to add them in dynamically
return env.SharedLibrary(
'-'.join([target, buildOS, buildArch]),
cppSources
)
我试过了什么 我试过几个不同的角度:
http://www.scons.org/wiki/DynamicSourceGenerator,但据我所知,这将为每个文件创建单独的生成目标,而我希望它们都包含在我的库构建中
使用发射器:SCons to generate variable number of targets,但我似乎无法解决依赖关系-无论如何分配依赖项,我的扫描仪都会在任何其他操作之前运行
我试着做另一个命令来收集一份文件-
^{pr2}$然而,这在
fatal error LNK1181: cannot open input file 'dummy-file.obj'
我想这是因为即使我清除了命令目标中的伪文件条目,但在它注册到buildsystem之后(并且生成了预期的目标)也会发生这种情况。在
所有这些都是为了说明—您将如何实现以下目标:
有什么建议吗?在
正如myaut正确地指出的,在您的情况下使用的方法是定义一个自定义生成器。它应该将当前的命令字符串作为Action,然后您可能还需要定义一个自定义发射器。请参见http://www.scons.org/wiki/ToolsForFools了解如何将所有“点放在i”上的更详细的描述。 发射器很重要,因为它在解析构建脚本时运行,所以当环境BigCatBuilder被称为。它的返回值是实际构建步骤(将来)将生成的目标列表。SCons将这些目标作为节点存储在一个内部结构中,在这个结构中它跟踪信息如下:这个节点是否具有隐式依赖关系?,是不是其中一个子对象不是最新的,所以目标需要重建?。。。 Glob()调用将在本地文件系统中搜索,但也会遍历提到的“虚拟文件树”…并且,像这样,能够跟踪对物理上还不存在的文件的依赖关系。 你不必到处传递生成的建造者的文件。Glob()通常为您完成大部分工作。。。在
如果您想告诉SCons一些文件是使用他不知道的工具生成的,请使用Builders。在
即:
最后,我只需在scons中运行exec语句来生成文件。有时,最短的路径是最好的:)
相关问题 更多 >
编程相关推荐