Hi Christof, Thanks for your solution! It works well, but seems a little inconvenient. Do I have to use CANONICAL_PATH on every file path? And I wonder whether this is a future of make or just a bug?
Jed 2010/12/8 Warlich, Christof <christof.warl...@siemens.com>: > Jed Jia wrote: >> Take a look at the following Makefile: >> >> > x: obj/./t >> > touch x >> > >> > obj/t: a >> > touch obj/t >> >> but make outputs: >> > make: *** No rule to make target `obj/./t', needed by `x'. Stop. > > While I'm not able to answer your final question, this function may help > (taken from https://github.com/dmoulding/boilermake): > >> # CANONICAL_PATH - Given one or more paths, converts the paths to the >> canonical >> # form. The canonical form is the path, relative to the project's top-level >> # directory (the directory from which "make" is run), and without >> # any "./" or "../" sequences. For paths that are not located below the >> # top-level directory, the canonical form is the absolute path (i.e. from >> # the root of the filesystem) also without "./" or "../" sequences. >> define CANONICAL_PATH >> $(patsubst ${CURDIR}/%,%,$(abspath ${1})) >> endef > > With this function, you could then write: > >> define CANONICAL_PATH >> $(patsubst ${CURDIR}/%,%,$(abspath ${1})) >> endef >> x: $(call CANONICAL_PATH,obj/./t) >> touch x >> >> $(call CANONICAL_PATH,obj/t): >> touch $(call CANONICAL_PATH,obj/t) > > This make your makefile independent from how a path is specified. > > Cheers, > > Christof > _______________________________________________ Help-make mailing list Help-make@gnu.org http://lists.gnu.org/mailman/listinfo/help-make