SCons: Dependency Loops?

I am trying to get SCons to copy a Makefile project from the source directory to the dir directory and run some commands to create libmoo.a, but I ran into a dependency loop error. Details follow:

./SConstruct:

env = Environment()
Export('env')

dirs = ['.']

variant_dir = 'build'

for dir in dirs:
        SConscript(dir + '/' + 'SConscript', variant_dir=variant_dir + '/' + dir, duplicate=0)

./SConscript:

import os
Import('env')

env.Command(env.Dir('moo2').abspath, env.Dir('#moo').abspath, ["echo copying moo to the build dir", Copy("$TARGET", "$SOURCE")])

env.Command(env.Dir('moo2/Makefile').abspath, env.Dir('moo2').abspath, 'echo would run moo2.configure')

moolib = env.Command(env.Dir('moo2/libmoo.a').abspath, env.Dir('moo2/Makefile').abspath, 'echo would run make')

Default(moolib)

Error starting scons:

scons: *** Found dependency cycle(s):
  build/moo2/Makefile -> build/moo2 -> build/moo2/Makefile
  build/moo2/libmoo.a -> build/moo2 -> build/moo2/Makefile -> build/moo2/libmoo.a

Also tried without using .abspath, but that doesn't matter, right?

I do not see any cycles:

  • build / moo2 / libmoo.a requires the assembly / moo 2 / Makefile
  • build / moo2 / Makefile requires build / moo2
  • build / moo2 requires (source /) moo

How are the males watching? It seems that build / moo2 / Makefile depends on the build / moo 2 / libmoo.a, which I did not want to specify.

Any related suggestions are also welcome :-)

+5
source share
1 answer

env.Dir('moo'). abspath SConscript. , :

Import('env')
env.Command('moo2', '#moo', ["echo copying moo to the build dir", Copy("$TARGET", "$SOURCE")])
env.Command('moo2/Makefile', 'moo2', 'echo would run moo2.configure')  # Look Here
moolib = env.Command('moo2/libmoo.a', 'moo2/Makefile', 'echo would run make')
Default(moolib)

:

scons: *** Found dependency cycle(s):
build/moo2/Makefile -> build/moo2 -> build/moo2/Makefile
build/moo2/libmoo.a -> build/moo2/Makefile -> build/moo2/libmoo.a

? SCons , . . "# Look Here". moo2/Makefile moo2. moo2 , , .

, ?

Import('env')
env.Install('moo2',Glob('#moo/*'))
env.Command('moo2/Makefile', env.Glob('moo2/*'), 'echo would run moo2.configure')
moolib = env.Command('moo2/libmoo.a', 'moo2/Makefile', 'echo would run make')
Default(moolib)

Copy() env.Install(). Copy build Environment(), . Install() Copy() , env.Install() env aware. , / , .

:

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/bdbaddog/devel/scons/trunk/bootstrap/src/script/scons.py --tree=prune
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
Install file: "moo/abc.c" as "build/moo2/abc.c"
Install file: "moo/configure" as "build/moo2/configure"
Install file: "moo/def.c" as "build/moo2/def.c"
echo would run moo2.configure
would run moo2.configure
echo would run make
would run make
+-build/moo2/libmoo.a
  +-build/moo2/Makefile
  | +-build/moo2/abc.c
  | | +-moo/abc.c
  | +-build/moo2/configure
  | | +-moo/configure
  | +-build/moo2/def.c
  | | +-moo/def.c
  | +-/bin/echo
  +-/bin/echo
scons: done building targets.

"--tree = prune", SCons ( 2 , )

+5

All Articles