this post was submitted on 12 Aug 2023
31 points (97.0% liked)

Linux

48317 readers
1009 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 5 years ago
MODERATORS
 

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 controversial new old
[–] [email protected] 10 points 1 year ago* (last edited 1 year ago) (2 children)

You can escape the :

URLS  = https\://foo.example.com
URLS += https\://bar.example.com
URLS += https\://www.example.org
[–] [email protected] 5 points 1 year 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 1 year ago (1 children)

@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 1 year ago (1 children)

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

[–] [email protected] 2 points 1 year 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 1 year ago

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

colon := :
$(colon) := :
url := https$(:)//something