makefile

Joining elements of a list in GNU Make


In my makefile I have a variable with a list of directories, like this:

DIRS = /usr /usr/share/ /lib

Now, I need to create PATH variable from it, which is basically the same, but uses semicolon as a separator:

PATH = /usr:/usr/share/:/lib

How do I do that? I mean, how do I join elements of DIRS list with semicolons, instead of spaces?


Solution

  • You can use the $(subst) command, combined with a little trick to get a variable that has a value of a single space:

    p = /usr /usr/share /lib
    noop=
    space = $(noop) $(noop)
    
    all:
            @echo $(subst $(space),:,$(p))