It works great, but I don't fully understand why. It even works better than specified in my post, because I want the compiled SDK files in a subdirectory. This is my working test dummy:
default: all all: exe clean: rm -f foo.obj bar.obj sdk-objects/baz.obj main.obj exe %.obj: $(filter %.src,$<) @mkdir -p "$(dir $@)" @echo "Compile $< to $@" cat $< > $@ exe: main.obj foo.obj bar.obj sdk-objects/baz.obj @echo link $^ to $@ cat $^ > $@ main.obj: main.src foo.obj: subdir/foo.src bar.obj: subdir/bar.src sdk-objects/baz.obj: /tmp/baz.src
It just does what I mean! But how does it work? The filter function should just return $< - but at that point, the filter function has processed the source pattern %.src, so the rule is no longer a simple pattern rule. And then, something magic happens ... ;-)
Alexander
In reply to Re^2: [OT] Making GNU make do what I mean
by afoken
in thread [OT] Making GNU make do what I mean
by afoken
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |