SCons code generation and VariantDir -
i scons generate source files me in src/
directory, , build them other source file in build directory build/variantx
.
this scons file:
import scons def my_builder(env, target, source): # stuff pass env = environment() env.variantdir('build/variant1/', 'src', duplicate=0) env.command('src/foobar.cc', 'src/foobar.input', action=my_builder) env.program('bin/test', [ 'build/variant1/foobar.cc', 'build/variant1/test.cc', ])
this errors following message:
source
src/foobar.cc
not found, needed targetbuild/variant1/foobar.o
which don't think correct, considering indeed providing command build src/foobar.cc
.
now, tried few workarounds:
if replace
build/variant1/foobar.cc
in programsrc/foobar.cc
, work,foobar.o
gets created insrc/
ratherbuild/variant1
if replace
src/foobar.cc
in commandbuild/variant1/foobar.cc
, work, code generated insrc/
; (also because things relative paths in include directories won't work unlessduplicate=1
)if
duplicate=1
, similar error message, time mentioning variant directory:source
build/variant1/foobar.cc
not found, needed targetbuild/variant1/foobar.o
is there way around this? limitation/bug in scons, or there fundamental misunderstanding on side?
i suggest creating explicit dependency between command() , program() calls follows:
target1 = env.command('src/foobar.cc', 'src/foobar.input', action=my_builder) target2 = env.program('bin/test', [ 'build/variant1/foobar.cc', 'build/variant1/test.cc', ]) depends(target2, target1) # should work # depends(target2, "src/foobar.cc")
or specify target command() part of source program() follows:
target1 = env.command('src/foobar.cc', 'src/foobar.input', action=my_builder) env.program('bin/test', [ target1, 'build/variant1/test.cc', ])
i havent tested this, im not sure how work in conjunction call variantdir()
here info regarding generating source code scons.
Comments
Post a Comment