我想知道爲什麼當我試圖瞭解爲什麼我在評論中提出的print語句不起作用時出現了什麼問題。
首先,在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的水珠()函數返回節點列表(文件),而不是一個字符串列表。按照SCons man page(搜索「水珠(」)的用法如下:
Glob(pattern, [ondisk, source, strings])
而且字符串參數執行以下操作:
的字符串參數可以設置爲True(或任何等效值),以 有水珠()函數返回字符串,而不是節點,代表了 匹配的文件或目錄...
的MSVSProject()製造商期待〜應變名單gs,而不是節點。因此,它可以作爲你,如果你做了以下預期:
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.
水珠()函數始終工作相對於當前SConscript文件,這樣做的那些目錄相對於當前的SConscript存在嗎? – Brady 2013-03-11 09:03:31
是的,他們確實存在。即使是簡單的單線測試也會失敗。 – drwbns 2013-03-11 10:52:22
您可以顯示基本的目錄結構,包括SConsctruct/Sconscript文件的位置。 – Brady 2013-03-11 11:20:37