scons喊道“没有图书馆这样的属性”!

时间:2011-12-20 09:32:25

标签: build scons

我是scons的新手并且一直试图构建一些文件,徒劳无功。我在Linux上,擅长Python。这是我的示例SConstruct文件:

vstPlugName = 'again'
vstSDKDir   = '/home/yati/Projects/Sound/vstsdk2.4'

env = Environment(CPPPATH=vstSDKDir, tools=['g++']) 
env['CCFLAGS'] = ['-Wall -O3']

src_dir = vstSDKDir + '/public.sdk/source/vst2.x'

env.Library(vstPlugName, [
                            vstPlugName + '.cpp', 
                            src_dir + '/audioeffect.cpp',
                            src_dir + '/audioeffectx.cpp',
                            src_dir + '/vstplugmain.cpp'
                            ])

目的是从显示的cpp文件中构建一个'.o' - 我尝试了env.Object()但它引发了一个异常,说“为一个目标文件提供了多个来源......” - 这是可以理解的。但是当我为上面的SConstruct脚本运行scons时,我得到了这个:

scons: Reading SConscript files ...
AttributeError: 'SConsEnvironment' object has no attribute 'Library':
File "/home/yati/Projects/Sound/development/again/source/SConstruct", line 10:
env.Library(vstPlugName, [

请帮忙。 Linux上有没有一个简短的,适合scons的介绍?我没有时间浏览整个联机帮助页或官方文档。

2 个答案:

答案 0 :(得分:5)

我不确定到底发生了什么,但我认为你可能用工具= ['g ++']来破坏东西。

我认为这可行:

env = Environment(CPPPATH=vstSDKDir, tools=['default', 'g++'])

答案 1 :(得分:3)

通过设置tools属性,您告诉scons只使用工具“g ++”。从它的外观来看,它看起来不像“g ++”工具包含链接器,因此环境不再支持库调用。如果你使用gcc作为工具,你将包含完整的编译器集合,因此它将使用g ++编译cpp文件。

正如您自己发现的那样,在大多数情况下可以完全省略这些工具,因为Scons会尝试为您选择正确的工具。但在其他情况下,可能需要告诉Scons优先选择一种工具。 (就像在Windows上我更喜欢SCons在编译c ++代码时使用mingw-g ++而不是visual c ++)然后

env = Environment(tools=['mingw'])

是必要的。