2013-03-11 64 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