%% gk <[EMAIL PROTECTED]> writes:

  g> I have discovered a behavior that seems a bit odd; would appreciate 
  g> thoughts on this:
  g> * a rule with prerequisite file that doesn't exist: 'afile'
  g> * an empty rule for 'afile'
  g> => target is never considered 'up to date'

Yes.

  g> It would seem to me that, since an empty rule is defined for
  g> 'afile', make should know that, since this prerequisite file does
  g> not exist and CANNOT be created, it cannot possibly make the target
  g> out of date, yet it does.

Yes.  Make in theory doesn't know _anything_ about your command script.
The fact that your script is empty and so doesn't do anything is not
within make's approved sphere of knowledge.  You have a target, you
defined a command script for it, make assumes that the script builds the
target.

GNU make performs various simplifying assumptions as a performance
enhancement, to avoid useless shell invocations, but this is only a
performance enhancement and cannot change the behavior of make
(according to the POSIX spec).

Finally, this is the traditional method of forcing rules to always be
rebuilt: most makes don't have a .PHONY special target, so they do this:

  foo: FORCE

  FORCE: ;

and foo will always be rebuilt.  This cannot be changed: there is
decades of history behind it.

  g> I want the prerequisite file to affect building target, only if it
  g> exists; otherwise target should be considered up to date.
  g> How best to achieve this?

You can't.

See Bug (enhancement request) #109 at the GNU make project page on
Savannah.

-- 
-------------------------------------------------------------------------------
 Paul D. Smith <[EMAIL PROTECTED]>          Find some GNU make tips at:
 http://www.gnu.org                      http://make.paulandlesley.org
 "Please remain calm...I may be mad, but I am a professional." --Mad Scientist


_______________________________________________
Help-make mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/help-make

Reply via email to