首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从makefile目标大写“$*”值?

如何从makefile目标大写“$*”值?
EN

Stack Overflow用户
提问于 2019-03-28 17:34:22
回答 2查看 5.8K关注 0票数 3

我有一组目标,每个目标用于一个不同的shell,如下所示:

代码语言:javascript
复制
BASH_VERSION := 4.4
FISH_VERSION := 3.0.0
…
ZSH_VERSION := 5.4.2-r1

.PHONY: dev-pure-on-bash
dev-pure-on-bash:
    $(MAKE) dev-pure-on TARGET=bash VERSION="${BASH_VERSION}" ARGS="VERSION=${BASH_VERSION}"

.PHONY: dev-pure-on-elvish
dev-pure-on-elvish:
    $(MAKE) dev-pure-on TARGET=elvish VERSION="${ELVISH_VERSION}" ARGS="VERSION=${ELVISH_VERSION}"

.PHONY: dev-pure-on-fish
dev-pure-on-fish:
    $(MAKE) dev-pure-on TARGET=fish VERSION="${FISH_VERSION}" ARGS="VERSION=${FISH_VERSION}"

…

.PHONY: dev-pure-on-xonsh
dev-pure-on-xonsh:
    $(MAKE) dev-pure-on TARGET=xonsh VERSION="${XONSH_VERSION}" ARGS="VERSION=${XONSH_VERSION}"

.PHONY: dev-pure-on-zsh
dev-pure-on-zsh:
    $(MAKE) dev-pure-on TARGET=zsh VERSION="${ZSH_VERSION}" ARGS="VERSION=${ZSH_VERSION}"

.PHONY: dev-pure-on
dev-pure-on:
    docker run \
        --name run-pure-on-${TARGET} \
        --rm \
        --interactive \
        --tty \
        --volume=$$PWD:/home/pure/.pure/ \
        pure-on-${TARGET}-${VERSION}

尝试

我试图使用模式规则,但没有成功:

代码语言:javascript
复制
dev-pure-on-%:
    $(MAKE) dev-pure-on TARGET=$* VERSION="${$*_VERSION}" ARGS="VERSION=${$*_VERSION}"

不过,我需要$*${$*_VERSION}大写字母

问题

如何大写$*的值并在另一个变量中使用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-28 18:42:31

正如马特所建议的,你为什么不使用这样的方法:

代码语言:javascript
复制
UC = $(shell echo '$*' | tr '[:lower:]' '[:upper:]')

然后使用$(UC)代替$*。或者如果你想做得更一般化:

代码语言:javascript
复制
UC = $(shell echo '$1' | tr '[:lower:]' '[:upper:]')

然后使用$(call UC,$*) (或其他任何东西而不是$*)。

使用递归,尝试使用特殊的shell工具,似乎需要大量开销,只是为了大写字符串。

票数 9
EN

Stack Overflow用户

发布于 2019-03-28 18:23:56

请投@麦迪斯特的回答票,这样我就可以完全实现了。

在我第一次尝试使用tr时,我错误地将代码放在目标体中,而不是在目标之前(作为make代码)。

解决方案

代码语言:javascript
复制
BASH_VERSION := 4.4
ZSH_VERSION := 5.4.2-r1

shell = $*
shell_name = $(shell echo '$*' | tr '[:lower:]' '[:upper:]')
shell_version = ${${shell_name}_VERSION}

.PHONY: dev-pure-on-%
dev-pure-on-%:
    @echo ${shell} ${shell_version}
    docker run \
        --name run-pure-on-${shell} \
        --rm \
        --interactive \
        --tty \
        --volume=$$PWD:/home/pure/.pure/ \
        pure-on-${shell}-${shell_version}
  • shell不是必要的,但比$*提供更多的意义
  • shell_name是大写的shell名称。
  • shell_version展开shell_name,然后展开结果变量(例如ZSH_VERSIONBASH_VERSION等)

用法

代码语言:javascript
复制
make dev-pure-on-bash
make dev-pure-on-zsh
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55403740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档