J'ai un projet C++ construit avec Scons. Au début je n'ai que la version optimisée à compiler, ça marche bien. Ensuite, j'ai aussi besoin d'une version de débogage, puis j'ajoute un autre environnement pour cela. Voici le code Scons:Comment utiliser Scons pour compiler les mêmes objets dans différents environnements avec 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)
Avec ce code, je suis tombé en erreur:
scons: *** Two environments with different actions were specified for the same target:
src/CometReadService.o
Comme vous pouvez le voir, ces cibles fichiers .o créés par opt.Glob ('src/. cpp ') et dbg.Glob (' src/ .cpp ') exactement le même nom. En lisant le document Multiple Construction Environments je sais que je peux renommer l'objet comme "opt.Object ('xxx-opt', 'xxx.c')", mais cependant, ce n'est pas Glob Object. Comment puis-je résoudre ce problème?
Des concepts difficiles à comprendre comme celui-là, avec des prénoms que vous n'aurez jamais l'idée de google pour réduire beaucoup la puissance de scons ... Personnellement, je voudrais juste appeler env.TemporaryObjectDir et tous mes Les .os y seront stockés ... Au lieu de cette bizarre solution de contournement ... Mais de toute façon, merci beaucoup, j'ai cherché des âges :-) –
Ceci est complètement retardé de Scons, l'idée de Globbing pour les fichiers dans un endroit ils n'existe pas (surtout avec le doublon = 0) est massivement contre-intuitif. J'ai vendu mon boss en utilisant des scons au lieu de l'horrible makefile que nous avions, mais maintenant je le regrette. –