tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: make: should -j affect cwd?



On Sat, 14 Jan 2012, James K. Lowden wrote:
It seems make(1) does or does not retain the effect of cd(1) between
commands depending on whether or not the -j option is used.  This
behavior is not documented.  Is it expected?

Yes, it's expected, and it's vaguely documented under "-B"
and "-j max_jobs" in the make(1) man page.

The target in question is on line 671:

        $(DOCDIR)/userguide/index.htm:

I don't know where that file is, but a portable Makefile must assume that it's unspecified whether or not each line of commands is run in a different subshell. A portable Makefile must therefore run both the "cd" command and anything that depends on it in a single logical line (otherwise it will fail if different lines get different subshells), and it must explicitly run the group of commands in a subshell using '(...)' (otherwise the next line will have the wrong directory, if different do not automatically get different subshells.

good:
        (cd dir1 ; cmd1)
        (cd dir2 ; cmd2)
fails_without_-B:
        cd dir1 ; cmd1
        cd dir2 ; cmd2
fails_with_-B:
        cd dir1
        cmd1
        cd dir2
        cmd2

--apb (Alan Barrett)


Home | Main Index | Thread Index | Old Index