如何为scons MSVSProject构建器函数构建文件列表?

时间:2013-03-11 01:43:46

标签: scons

我正在尝试类似的事情 -

projects = envsrc.MSVSProject(target = 'none' + env['MSVSPROJECTSUFFIX'],
srcs = Glob("src/*.cpp"),
incs = Glob("src/*.hpp"),
buildtarget = exe,
variant = 'Release')

但是我得到的错误是srcs必须是字符串或字符串列表,这是正确的方法吗? src是root目录中包含头文件和cpp文件的文件夹,sconscript在根目录中

1 个答案:

答案 0 :(得分:3)

当我试图了解为什么我在评论中建议的印刷语句不起作用时,我弄清楚问题是什么。

首先,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()函数返回一个节点(Files)列表,而不是一个字符串列表。根据{{​​3}}(搜索'glob('),用法如下:

Glob(pattern, [ondisk, source, strings])

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.