Если это буквально код, я вижу два способа удалить предупреждение:
# /SConstruct
<...>
subdirs = ['variant1', 'variant2', 'variant3']
for subdir in subdirs:
SConscript(dirs=subdir, src_dir=subdir)
# /variant1/SConscript
localEnv = env.Clone() # Duplicates the global Environment so we may modify it without problems
localEnv.Command('../libs/generated.so', '', 'someexternalscript')
<...>
# /variant2/SConscript
localEnv = env.Clone() # Duplicates the global Environment so we may modify it without problems
localEnv.Command('../libs/generated.so', '', 'someexternalscript')
<...>
Также обратите внимание, что на самом деле нет двух SConscripts (один в варианте 1 и один в варианте 2, это тот же SConscript.
Первый : вызов некоторого внешнего сценария перед клоном:
# /variant*/SConscript
env.Command('../libs/generated.so', '', 'someexternalscript')
localEnv = env.Clone() # Duplicates the global Environment so we may modify it without problems
<...>
Во-вторых : добавить условную логику и передать флаг с помощью вызова SConscript:
# /SConstruct
<...>
subdirs = ['variant1', 'variant2', 'variant3']
for subdir in subdirs:
build_generated = (subdir == 'variant1')
SConscript(dirs=subdir, src_dir=subdir, exports=['env','build_generated'])
# /variant*/SConscript
Import('build_generated','env')
localEnv = env.Clone() # Duplicates the global Environment so we may modify it without problems
if build_generated:
localEnv.Command('../libs/generated.so', '', 'someexternalscript')
<...>
Наконец : если вы всегда хотите, чтобы этот скрипт вызывался, вы можете поместить вызов в сам SConstruct.
Кроме того, зачем указывать источник для цели как ''?
Эта цель никогда не изменится, по крайней мере, источником должен быть someexternalscript