On Fri, 2013-02-15 at 10:26 -0800, nollam wrote: > Consider the following typescript: > > Script started on Fri Feb 15 14:21:53 2013 > > $ ls > makefile typescript > $ cat makefile > all: a.booklet > > %.booklet: %.common > mkdir -p $@/a > > %.common: > mkdir -p $@/b > $ make > mkdir -p a.common/b > mkdir -p a.booklet/a > rm a.commonmake: unlink: a.common: Operation not permitted
This is because a.common is considered an intermediate file; see: http://www.gnu.org/software/make/manual/html_node/Chained-Rules.html GNU make tries to delete intermediate files (by default). Unfortunately it's not smart enough to realize that the file is really a directory. You can fix this by forcing the directory to not be considered intermediate, in various ways, such as mentioning it explicitly rather than (or in addition to) having it implied as a pattern. However, be aware that you will virtually never get the behavior you want, using a directory as prerequisite. Make uses time-last-modified to decide when to rebuild, and the update of a directory's TLM value happens in ways that don't work well with make. Just don't do it. _______________________________________________ Help-make mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-make
