31
submitted 2 years ago by [email protected] to c/[email protected]

cross-posted from: https://lemmy.ml/post/3229278

Suppose I've got a simple #Makefile w/ a few URLs that I'd like to process as dynamic targets.

For example here is a not working snippet:

.DEFAULT_GOAL := all

#####
URLS  = https://foo.example.com
URLS += https://bar.example.com
URLS += https://www.example.org

#####
% :
	@echo the url is $(*)

#####
.PHONY : all
all : $(URLS)

It fails w/

*** target pattern contains no '%'

I believe that's b/c of the character : being part of URLS which confuses Make after expansion (order o

As a workaround, I've removed https:// from all URLs. For example this works:

URLS = foo.example.com
URLS += bar.example.com

I know Make generally doesn't play well w/ targets w/ space or colon in the name but I wonder if the above is the best I can do. What do you think?

top 6 comments
sorted by: hot top new old
[-] [email protected] 10 points 2 years ago* (last edited 2 years ago)

You can escape the :

URLS  = https\://foo.example.com
URLS += https\://bar.example.com
URLS += https\://www.example.org
[-] [email protected] 5 points 2 years ago

Ah...this explains why it works: https://savannah.gnu.org/bugs/?712#comment16

It's a new feature \o/

#TIL

[-] [email protected] 1 points 2 years ago

@pnutzh4x0r @[email protected] I'm not at my desk now but I doubt it will work. Make has no notion of escaping as far as I know.

[-] [email protected] 1 points 2 years ago

I just tried it with GNU make 4.3 and it worked.

[-] [email protected] 2 points 2 years ago

Oh, it works 🎉 Thank you!

For posterity here's a complete example:

foo\:bar :
	@echo $(@)

and then

$ make foo:bar
foo:bar

Though, TBH, I don't understand how this works 🤦‍♂️ I need to look into Make docs.

[-] [email protected] 2 points 2 years ago

I didn't try yet: https://www.cmcrossroads.com/article/gnu-make-escaping-walk-wild-side

colon := :
$(colon) := :
url := https$(:)//something
this post was submitted on 12 Aug 2023
31 points (97.0% liked)

Linux

56347 readers
697 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 6 years ago
MODERATORS