我有一個C++項目與Scons搭建。起初我只有優化的版本來編譯,它工作正常。然後我還需要一個調試版本,然後爲它添加另一個環境。下面是使用SCons代碼:如何使用Scons在Glob的不同環境下編譯相同的對象?
env = Environment()
opt = env.Clone(CCFLAGS=['-pthread', '-O3', '-Wall'])
opt_objs = opt.Glob('src/*.cpp')
prog = opt.Program('prog', opt_objs)
dbg = env.Clone(CCFLAGS=['-pthread', '-Wall', '-g', '-O0'])
dbg_objs = dbg.Glob('src/*.cpp')
dbg_prog = dbg.Program('dbg_prog', dbg_objs)
有了這個代碼,我遇到了錯誤:
scons: *** Two environments with different actions were specified for the same target:
src/CometReadService.o
正如你所看到的,通過opt.Glob創建的那些.o文件目標(「SRC/。 cpp')和dbg.Glob('src/ .cpp')完全相同的名稱。通過閱讀文檔Multiple Construction Environments我知道我可以重命名對象,如「opt.Object('xxx-opt','xxx.c')」,但是,它是Glob not Object。我怎麼解決這個問題?
難以理解的概念,如那個,給定的名稱,你永遠不會有想法谷歌爲減少很多scons的力量...個人,我希望只是調用env.TemporaryObjectDir和所有我的.os將被存儲在那裏...而不是這個奇怪的解決方法...但無論如何,非常感謝你,我搜索了年齡:-) – 2014-11-03 11:21:12
這是完全推遲的Scons,Globbing的想法在一個地方的文件不存在(特別是在複製= 0時)非常不直觀。出售我的老闆使用scons而不是我們可怕的makefile,但現在我後悔了。 – 2016-07-13 12:41:10