我是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的介绍?我没有时间浏览整个联机帮助页或官方文档。
答案 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'])
是必要的。