在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
,但我似乎无法解决依赖关系-无论我如何分配依赖关系,我的扫描仪都会先于其他任何东西运行
我尝试制作另一个命令来收集文件列表-
def gatherGenCpp(target, source, env):
allFiles = Glob('generated/cpp/*.cpp')
# clear dummy target
del target[:]
for f in allFiles:
target.append(f)
genSources = env.Command(['#dummy-file'], cppdir, gatherGenCpp)
env.Depends(genSources, cppSources)
allSources = genSources + cppSources
return env.SharedLibrary(
'-'.join([target, buildOS, buildArch]),
allSources
)
然而,这失败了
致命错误LNK1181:无法打开输入文件“dummy file.obj”
我猜这是因为即使我从命令的目标中清除了伪文件条目,但这是在它注册到构建系统之后发生的(并且生成了预期的目标)。
所有这些都可以说-您将如何实施以下内容:
-
一个命令生成一堆CPP文件
-
这些文件将添加到传入的文件列表中
-
我们从这个cpp文件列表中构建一个dll。
有什么建议吗?