我注意到对Object
和Library
构建者的调用有时会在最后使用可选参数,例如
Object('hello.c', CCFLAGS='-DHELLO')
Object('goodbye.c', CCFLAGS='-DGOODBYE')
Object
,Library
和SharedLibrary
都可以选择任意一组,还是仅限于一组特定的变量?如果是这样的话,我希望在一段时间内保存当前非常大的SCons构建。
答案 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将不会发出警告或错误。