2014-04-22 47 views
1

我注意到調用ObjectLibrary建設者有時需要可選的參數在年底如可選環境參數給SCons建設者

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

可以ObjectLibrarySharedLibrary所有帶他們任意一組或它們是否侷限於一組特定的變量?如果是這樣,這應該可以節省我們目前非常大的SCons在我希望的某個時間在工作中建造。

回答

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']) 
0

什麼Brady表示大多是正確的。 但是,您可以將任何(數量)的Environment()變量附加到任何構建器的末尾。這些創建一個OverrideEnvironment(),然後用它來運行構建器。

如果你改變CCCOM和/或用於運行編譯器,然後添加這些變量構建器調用也將產生一定的影響送入命令行的任何變量的值。

如果指定這對當前的Builder或沒有影響未在SCons的或可能已創建使用SCons不會發出警告或錯誤的任何製造商的任何地方甚至定義一個變量。