dale@vicorp.UUCP (Dale Nielsen) (09/01/89)
I have a problem with the way gnu-make-3.55 identifies implied phony targets. A target with no dependencies that has rules associated with it is assumed to be a phony target even though it is not declared as one. I use file targets without dependencies in my makefiles to create directories that only need to exist, not "updated". Consider the following makefile: ####################### .PHONY : all all : dir/foo dir/bar dir/foo : dir touch $@ dir/bar : dir touch $@ dir : mkdir $@ ####################### The first time this is run we get: mkdir dir touch dir/foo touch dir/bar Which is ok. The second time we get: mkdir dir mkdir: dir: File exists Why should make update dir? It isn't a phony target and it does exist so it shouldn't be remade. Here is the diff -c output for what I changed in order to fix it: ############################################################################ *** remake.c Fri Sep 1 12:05:40 1989 --- remake.c.orig Tue Aug 22 05:21:12 1989 *************** *** 449,464 **** /* Here depth returns to the value it had when we were called. */ depth--; - #ifdef IMPLIED_PHONY_TARGETS if (file->deps == 0 && file->cmds != 0) { must_make = 1; DEBUGPR ("Target `%s' has commands but no dependencies.\n"); } ! else ! #endif IMPLIED_PHONY_TARGETS ! ! if (!deps_changed && file->cmds == 0) { must_make = 0; DEBUGPR ("No commands for `%s' and no dependencies actually changed.\n"); --- 449,460 ---- /* Here depth returns to the value it had when we were called. */ depth--; if (file->deps == 0 && file->cmds != 0) { must_make = 1; DEBUGPR ("Target `%s' has commands but no dependencies.\n"); } ! else if (!deps_changed && file->cmds == 0) { must_make = 0; DEBUGPR ("No commands for `%s' and no dependencies actually changed.\n"); ############################################################################ It seems to me that there should be no implied PHONY targets, but I want to be sure I'm not screwing something else up by doing this. Comments? -- --Dale Nielsen ARPA: dale@vicorp.UU.NET V. I. Corporation UUCP: uunet!vicorp!dale Amherst Research Park PHONE: (413) 253-3482 Amherst, Massachusetts 01002 FAX: (413) 256-0574