makefile:多个自动变量
makefile: multiple automatic variables
假设我有以下内容:
$: make foo-bar
// makefile contents
.PHONY foo-
foo-%:
echo $*
我想增加灵活性:
# either:
$: make foo-bar:foobar
# or:
$: make foo-bar-foobar
// makefile contents, pseudocode
.PHONY foo- foo-?-?
foo-%:
echo $*
foo-%1-%2:
echo $*1 $*2
需要注意的是,我已经看到自动生成的大型 makefile 已成功实现复杂的接口,例如:
make foo:bar:baz
理想情况下,可以实现逻辑符号:
make foo::bar:baz
# but I understand that this may be reaching.
现代 gnu make 可以实现这些吗?我不担心旧版本。与一些冗长的解决方法相比,优势来自于简洁和干净。
如果您对每个细分的可能性有限,一种选择是您执行以下操作:
targs := $(foreach v1,foo foo1 foo2,\
$(foreach v2,bar bar1 bar2,\
$(foreach v3,foobar1 foobar2 foobar3, \
$(v1)-$(v2)-$(v3))))
$(targs) :
@IFS=- read v1 v2 v3 <<< $@; \
echo $$v1 $$v2 $$v3
否则,如果第一段总是 foo-
那么你可以这样做:
foo-% :
IFS=- read v1 v2 v3 <<< $@; \
echo $$v1 $$v2 $$v3
除此之外,您可能需要创建一个脚本来手动将目标分成多个部分,如果您想将这些部分用作单独的目标,则可能需要调用一个 submake。
假设我有以下内容:
$: make foo-bar
// makefile contents
.PHONY foo-
foo-%:
echo $*
我想增加灵活性:
# either:
$: make foo-bar:foobar
# or:
$: make foo-bar-foobar
// makefile contents, pseudocode
.PHONY foo- foo-?-?
foo-%:
echo $*
foo-%1-%2:
echo $*1 $*2
需要注意的是,我已经看到自动生成的大型 makefile 已成功实现复杂的接口,例如:
make foo:bar:baz
理想情况下,可以实现逻辑符号:
make foo::bar:baz
# but I understand that this may be reaching.
现代 gnu make 可以实现这些吗?我不担心旧版本。与一些冗长的解决方法相比,优势来自于简洁和干净。
如果您对每个细分的可能性有限,一种选择是您执行以下操作:
targs := $(foreach v1,foo foo1 foo2,\
$(foreach v2,bar bar1 bar2,\
$(foreach v3,foobar1 foobar2 foobar3, \
$(v1)-$(v2)-$(v3))))
$(targs) :
@IFS=- read v1 v2 v3 <<< $@; \
echo $$v1 $$v2 $$v3
否则,如果第一段总是 foo-
那么你可以这样做:
foo-% :
IFS=- read v1 v2 v3 <<< $@; \
echo $$v1 $$v2 $$v3
除此之外,您可能需要创建一个脚本来手动将目标分成多个部分,如果您想将这些部分用作单独的目标,则可能需要调用一个 submake。