[Scons-users] scons checking targets actually built?
William Deegan
bill at baddogconsulting.com
Thu Apr 18 20:50:46 EDT 2013
Robert,
On Apr 18, 2013, at 4:13 PM, robert zeigler <robert.zeigler at gmail.com> wrote:
> Hi,
>
> Fairly new to scons. I have been playing with it the last few days and like what I see. However, I stumbled on behavior today that has me troubled.
>
> Consider a very simple build script:
>
> Command(['a.txt'],[],"echo hi > $TARGET")
> Command(['b.txt'],['a.txt'],"cat $SOURCE > $TARGET && echo foo >> $TARGET")
>
> This runs fine:
>
> scons: Reading SConscript files ...
> scons: done reading SConscript files.
> scons: Building targets ...
> echo hi > a.txt
> cat a.txt > b.txt && echo foo >> b.txt
> scons: done building targets.
>
> Now consider an alternative command for building a:
>
> Command(['a.txt'],[],"echo hi > $TARGET && rm $TARGET")
>
> Then you get:
>
> scons: Reading SConscript files ...
> scons: done reading SConscript files.
> scons: Building targets ...
> echo hi > a.txt && rm a.txt
> cat a.txt > b.txt && echo humbug >> b.txt
> cat: a.txt: No such file or directory
> scons: *** [b.txt] Error 1
> scons: building terminated because of errors.
>
> The build fails, of course, but what troubles me is that it doesn't fail until we attempt to build b.txt. I would have expected scons to verify that the target was actually build by the command; failing that, I'm surprised that it attempted to build b.txt when a.txt was clearly not present for b.txt to be built?
>
> Clarification on this is greatly appreciated. Although the case above is trivial, I ran into this issue in a non-trivial case, as well.
So you've told SCons that the target is a.txt, it runs that command.
At that point it expects a.txt to exist, because you told it that it would create it.
Then you run the next command which depend on a.txt, and the shelled command fails.
So to SCons it clearly was there at that point.
You'll notice the same behavior with Make if you have a similar set of logic.
Are you expecting it to rescan after a command is run which should create a file to check if it was created?
-Bill
More information about the Scons-users
mailing list