URL:
  <https://savannah.gnu.org/bugs/?67265>

                 Summary: $(file) in commands is executed too early
                   Group: make
               Submitter: zackw
               Submitted: Mon 30 Jun 2025 02:50:00 PM GMT
                Severity: 3 - Normal
              Item Group: None
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any
       Component Version: None
        Operating System: None
           Fixed Release: None
           Triage Status: None


    _______________________________________________________

Follow-up Comments:


-------------------------------------------------------
Date: Mon 30 Jun 2025 02:50:00 PM GMT By: Zack Weinberg <zackw>
This Makefile should, but does not, create a file named 'test.txt' in a
directory named 'test.d':


define contents
hello world
endef

all:
        mkdir -p test.d
        $(file > test.d/test.txt, $(contents))

.PHONY: all


Instead, you get an error message:


Makefile:7: *** open: test.d/test.txt: No such file or directory.  Stop.


Evidently the $(file) special command has been executed out of sequence,
before the mkdir command -- I'm guessing that, despite having the form of a
command, it's being executed as part of variable expansion for the entire
command list, before anything else happens.  This is surprising and unlikely
to be the desired behavior.  Instead it should be executed only after all
preceding commands have executed -- after the mkdir, in this case.

The test makefile obviously could have been written more reliably  with
separate rules to create the directory and the file, with the latter depending
on the former, but this is not possible in more complicated situations, and
also, as you know, there are problems with having a directory as a
prerequisite.







    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?67265>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature

Reply via email to