Hi! I found a lot of manual pages have '::' in them, and would like to be able to work with them with Makefiles. I've been testing a little bit, and I think I got some consistent mental model of how GNU Make handles colons in pathnames.
I'd like you to confirm if this is solid, and I can rely on Make not having regressions in this regard in the future, or if it's completely unsupported and likely to break. Also, I find some minor inconveniences that I don't know if they could be solved, or if that would require changing important logic. I posted an answer in StackOverflow about it: <https://stackoverflow.com/a/76096683/6872717> $ tree . ├── Makefile ├── dst │ ├── a │ ├── b │ └── c └── src └── : $ cat Makefile SRC := $(shell find src -type f | sed 's,:,\\:,') DST_a := $(patsubst src/%,dst/a/%,$(SRC)) DST_b := $(patsubst src/%,dst/b/%,$(SRC)) DST_c := $(patsubst src/%,dst/c/%,$(SRC)) .PHONY: a a: $(DST_a); $(DST_a): $(SRC) touch $@ .SECONDEXPANSION: .PHONY: b b: $(DST_b); $(DST_b): $(SRC) touch $@ .PHONY: c c: $(DST_c); $(DST_c): $$(SRC) touch $@ And then I can run the targets: $ make a touch dst/a/: $ make b touch dst/b/: $ make c make: *** No rule to make target 'src/\:', needed by 'dst/c/:'. Stop. So, it seems we only need to transform ':' into '\:' in the variables (the sed(1) call is for that). Then, it's all fine, with one caveat: Okay, the third one didn't work, but I can live with it if I just need to avoid second-expanding variables with escaped colons. That was the minor inconvenience that would be nice to fix, but not really disturbing. $ tree . ├── Makefile ├── dst │ ├── a │ │ └── : │ ├── b │ │ └── : │ └── c └── src └── : Thanks, Alex -- <http://www.alejandro-colomar.es/> GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5
OpenPGP_signature
Description: OpenPGP digital signature