Is there a way to remove a prefix from a string (a pathname in my case) in make
?
As an example, suppose I had the string:
FILES = a/b/c.d a/b/e.f
I want to remove the a/
, and be left with b/c.d b/e.f
I have tried using various combinations of dir
, notdir
and basename
from the GNU make manual, but none seem to provide a nice solution.
$(dir $(FILE)) # a/b a/b
$(notdir $(FILE)) # c.d e.f
$(basename $(FILE)) # a/b/c a/b/e
The only way I've found to do this so far is:
$( join $(basename $(dir $(FILE))), $(notdir $(FILE)) )
Which is really ugly and long-winded. What I really need is some kind of $(removeprefix ...)
function. Assuming that I know the prefix (a/
) to be removed, can this be done with some kind of string manipulation?
The prefix is want is /usr for most packages. So --prefix=/usr will do the job, but not all packages come with configure, a lot of them have just a makefile.
There are multiple ways to remove whitespace and other characters from a string in Python. The most commonly known methods are strip() , lstrip() , and rstrip() . Since Python version 3.9, two highly anticipated methods were introduced to remove the prefix or suffix of a string: removeprefix() and removesuffix() .
You can strip off a leading a/
with
$(FILE:a/%=%)
See the text substitution function reference for more options & details.
Since you say GNU make, why not just:
$(FILE:a/%=%)
?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With