Hello, On Thu, Mar 10, 2005 at 10:05:51PM +0200, Paul Pogonyshev wrote: > I'm not sure which one comes first. [...] I can just do > > foo.c : foo.h > foo.c foo.h : ... > if $(BUILD_THEM_FILES) foo.list foo.h foo.c; then \ > touch foo.c; \ > else \ > (rm -f foo.c foo.h; exit 1) \ > fi > > right?
Correct, of course. About the side topic of suffixes: > Well, I also need something like `echo "$*" | sed 's/\.h$/.c/'` No, $* is the base without the suffix. > in one directory I have two `.list' files, one of which is processed > by my parser, while the other---by `glib-genmarshal' (I chose my > suffix before I even started with GTK+ GUI.) One option is to change the suffix for your parser, of course. Or you could do something like: LIST_H_CMDS = if $(BUILD_THEM_FILES) $*.list $*.h $*.c; then \ touch $*.c; \ else \ (rm -f $*.c $*.h; exit 1) \ fi BUILD_THEM_FILES = case $* in \ *marshal*) $(GENMARSHAL_CMD) $*.list ... ;; \ *) $(PARSE) $*.list ... ;; \ esac .list.h: $(LIST_H_CMDS) .list.c: $(LIST_H_CMDS) All the variables in the commands, are expanded just before execution, so the usage of $* ``outside of a rule'' is correct here. But when I recall that all this is done just to be able to do xx_SOURCES = foo.list ... intead of xx_SOURCES = ... nodist_xx_SOURCES = foo.c EXTRA_DIST = foo.list then I agree it's not worth it. (Setting CLEANFILES = foo.c foo.h; BUILT_SOURCES = foo.h is necessary in both cases.) Have a nice day, Stepan