SCons构建器的可选环境参数

时间:2014-04-22 19:41:17

标签: environment-variables builder scons build-tools

我注意到对ObjectLibrary构建者的调用有时会在最后使用可选参数,例如

Object('hello.c', CCFLAGS='-DHELLO')
Object('goodbye.c', CCFLAGS='-DGOODBYE')

ObjectLibrarySharedLibrary都可以选择任意一组,还是仅限于一组特定的变量?如果是这样的话,我希望在一段时间内保存当前非常大的SCons构建。

2 个答案:

答案 0 :(得分:2)

C / C ++构建器识别一组特定的参数,称为Construction Variables

可以在环境中设置这些变量,也可以像在问题中一样调用构建器。通常更容易在环境中设置它们,从而使对构建器的调用更简单,然后只在必要时修改变量。

以下是一个例子:

env = Environment()

# Notice that CPPPATH, CPPDEFINES, LIBS, and LIBPATH dont include the
# compiler flags -I, -D, -l, and -L respectively, SCons will add those
# in a platform independent manner
env.Append(CCFLAGS=['-g', '-O2'])
env.Append(CPPPATH=['some/include/path'])
env.Append(CPPDEFINES=['YOUR_DEFINE'])
env.Append(LIBS=['pthread'])
env.Append(LIBPATH=['some/lib/path'])

# All of these builder calls use the construction  
# variables set on the environment above
env.Object('hello.c')
env.Object('goodbye.c')
env.Program('main.cc')

如果要覆盖特定变量,可以执行以下操作

env.Object('hello.c', CPPDEFINES='HELLO')

或者,如果您想通过一次调用追加到特定变量,您可以执行以下操作:

env.Object('hello.c', CPPDEFINES=[env['CPPDEFINES'], 'HELLO'])

答案 1 :(得分:0)

Brady所说的大多是正确的。 但是,您可以将任何(数量)Environment()变量附加到任何构建器的末尾。这些创建了一个OverrideEnvironment(),然后用于运行构建器。

如果您要更改CCCOM的值和/或任何进入命令行的变量以运行编译器,那么将这些变量添加到构建器调用也会产生一些影响。

如果指定的变量对当前构建器没有影响,或者甚至没有在SCons或任何构建器中定义的变量,那么SCons将不会发出警告或错误。