当我试图了解为什么我在评论中建议的打印语句不起作用时,我发现了问题所在。
首先,在 Python 中打印字符串列表中所有字符串的有效方法如下:
', '.join(Sources)
引号', '
中的部分是字符串列表中元素之间的分隔符。
我意识到以下 SConstruct 摘录的问题:
sources = (Glob('src/dir1/*.cc')
+Glob('src/dir2/*.cc')
+Glob('src/dir3/*.cc'))
print sources
print ', '.join(sources)
这给出了这个输出:
scons: Reading SConscript files ...
[<SCons.Node.FS.File object at 0x122e4d0>, <SCons.Node.FS.File object at 0x122e710>, <SCons.Node.FS.File object at 0x122e950>]
TypeError: sequence item 0: expected string, File found:
File "/home/notroot/projects/sandbox/SconsGlob/SConstruct", line 10:
print ', '.join(sources)
那时我记得 SCons Glob() 函数返回的是节点(文件)列表,而不是字符串列表。根据SCons 手册页(搜索 'glob(' ),用法如下:
Glob(pattern, [ondisk, source, strings])
字符串参数执行以下操作:
strings 参数可以设置为 True (或任何等效值),以使 Glob() 函数返回表示匹配文件或目录的字符串,而不是节点......
MSVSProject() 构建器需要一个字符串列表,而不是节点。因此,如果您执行以下操作,它会按预期工作:
sources = (Glob('src/dir1/*.cc', strings=True)
+Glob('src/dir2/*.cc', strings=True)
+Glob('src/dir3/*.cc', strings=True))
print ', '.join(sources)
这给出了以下输出:
scons: Reading SConscript files ...
src/dir1/main.cc, src/dir2/func2.cc, src/dir3/func3.cc
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
scons: done building targets.