5go*_*der 18 makefile space path gnu-make colon
给定以冒号分隔的路径列表,使用GNU Make获取以空格分隔的列表非常简单:
CPATHS := /usr/bin/foo:/usr/bin/baz:/usr/bin/baz
SPATHS := $(subst :, ,$(CPATHS))
Run Code Online (Sandbox Code Playgroud)
但是,我找不到朝着相反方向前进的好方法.以下hack确实有效(至少在安装了sed的情况下)但是我很确定只有使用Make的内部函数才能有更好的解决方法.
SPATHS := /usr/bin/foo /usr/bin/baz /usr/bin/baz
CPATHS := $(shell echo $(SPATHS) > tmp; sed 's/ \+/:/g' tmp; rm tmp)
Run Code Online (Sandbox Code Playgroud)
Eld*_*mov 19
这里唯一棘手的部分是定义一个文字空间:
space :=
space +=
SPATHS := /usr/bin/foo /usr/bin/baz /usr/bin/baz
CPATHS := $(subst $(space),:,$(SPATHS))
Run Code Online (Sandbox Code Playgroud)
Rei*_*ica 15
获得文字空间的最短方法是通过$() $()
. 因此:
$(subst $() $(),:,$(CPATHS))
Run Code Online (Sandbox Code Playgroud)
或者,为简洁起见:
_=$() $()
$(subst $(_),:,$(CPATHS))
Run Code Online (Sandbox Code Playgroud)
同样的技巧适用于 cmake 的宏可能是一个有趣的好奇心,即它${}
是一个分隔符但它本身不引入空格。
归档时间: |
|
查看次数: |
4363 次 |
最近记录: |