Как мне разбить строку в make? - PullRequest
27 голосов
/ 17 декабря 2011

Мне нужно взять параметр в моем Makefile, который состоит из идентификатора хоста в форме

host[:port]

, где двоеточие и порт необязательны.Таким образом, все перечисленные ниже допустимы:

foo.example.com
ssl.example.com:443
localhost:5000

и т. Д.

Я хочу разбить строку на необязательном двоеточии и присвоить значения переменным, чтобы HOST содержал foo.example.com, ssl.example.com, localhost и т. Д., А PORT содержит 80 (порт по умолчанию), 443 и 500 соответственно.

1 Ответ

45 голосов
/ 17 декабря 2011
# Retrieves a host part of the given string (without port).
# Param:
#   1. String to parse in form 'host[:port]'.
host = $(firstword $(subst :, ,$1))

# Returns a port (if any).
# If there is no port part in the string, returns the second argument
# (if specified).
# Param:
#   1. String to parse in form 'host[:port]'.
#   2. (optional) Fallback value.
port = $(or $(word 2,$(subst :, ,$1)),$(value 2))

Использование:

$(call host,foo.example.com) # foo.example.com
$(call port,foo.example.com,80) # 80

$(call host,ssl.example.com:443) # ssl.example.com
$(call port,ssl.example.com:443,80) # 443
...