2013-03-11 35 views
1

我目前正试图像 -如何构建scons MSVSProject构建器函数的文件列表?

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

但我得到的SRC必须是一个字符串的字符串或列表中的错误,什么是这个正确的方式? src是包含标题和cpp文件的根目录中的一个文件夹,sconscript位于根目录中

+0

水珠()函数始终工作相对于当前SConscript文件,这样做的那些目录相对于当前的SConscript存在吗? – Brady 2013-03-11 09:03:31

+0

是的,他们确实存在。即使是简单的单线测试也会失败。 – drwbns 2013-03-11 10:52:22

+0

您可以显示基本的目录结构,包括SConsctruct/Sconscript文件的位置。 – Brady 2013-03-11 11:20:37

回答

3

我想知道为什么当我试图了解为什么我在评论中提出的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. 
+0

你摇滚,感谢的人!它看起来像它的工作! – drwbns 2013-03-11 14:05:33

+0

@drwbns,高兴地帮助:) – Brady 2013-03-11 14:11:49

+0

它输出.sln和.vcxproj文件,但他们不会打开。是否有任何其他参数我需要设置以获得工作sln文件? – drwbns 2013-03-11 14:24:11