On 2023-09-03 14:38, Paul Smith wrote: > On Sun, 2023-09-03 at 13:14 +0200, Alejandro Colomar wrote: >>> You need to put the ifdef outside the recipe: >> >> That would hurt readability a little bit. > > IMO a make preprocessor statement inside a recipe is a code smell and I > would find the "outside the recipe" version simpler to understand, but > of course this is a personal taste thing. >
The rule is something like this: target: source sed 's/%date%/$(shell date)/' <$< | ifneq ($(VERSION),) sed 's/%version%/$(VERSION)/' | endif cp -T /dev/stdin $@ I could first copy and then edit in-place, to avoid needing .ONESHELL: target: source cp -T $< $@ sed -i 's/%date%/$(shell date)/' $@ ifneq ($(VERSION),) sed -i 's/%version%/$(VERSION)/' $@ endif But I don't like this as much; it's probably quite inefficient. Then I could split this rule into intermediate targets, and make the dependencies variable depending on $(VERSION). Something like ifeq ($(VERSION),) target: target-version target-version: target-date else target: target-date endif target-date: source sed 's/%date%/$(shell date)/' <$< >$@ target-version: sed 's/%version%/$(VERSION)/' <$< >$@ target: cp -T $< $@ It's more work, but would keep it at 1 canned recipe per rule, which should be the normal thing. I might do this. It felt a bit overkill, but I don't know. Cheers, Alex -- <http://www.alejandro-colomar.es/> GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5
OpenPGP_signature
Description: OpenPGP digital signature