[英]Makefile - Catch-all Target
我想知道是否可以讓Makefile
將命令發送到未知目標並直接運行它。
例如,我有一個腳本(我無法更改),它向我的應用程序Docker容器發出命令,如下所示:
docker run -it my_app:latest "env FOO=bar bundle exec rails c"
這被翻譯成:使“ env FOO =棒束exec rails c”
生成: Makefile:7: *** missing target pattern. Stop.
Makefile:7: *** missing target pattern. Stop.
這是我首先嘗試捕獲未知目標的嘗試:
.DEFAULT_GOAL: passthrough
passthrough:
@echo $(MAKECMDGOALS) # always empty
@echo ${ARGS} # always empty
是否可以在docker run參數中捕獲傳遞給Makefile的整個字符串,然后直接運行它?
我意識到這已經遲了一年半了,但是由於我有這個問題並且有一些合理的東西,我想其他人可能會下線。
使用這樣的Makefile和.DEFAULT
目標
docker_cmd = docker run --rm -it bash -c
.DEFAULT:
@$(docker_cmd) "$@"
您可以使用一個按原樣傳遞給$@
“目標”來調用make
。
$ make 'env FOO=bar /usr/bin/uptime'
21:06:15 up 24 days, 9:26, load average: 0.54, 0.46, 0.52
關鍵是要make
此處生成的參數是一個正確引用的單個參數-否則make
執行其操作並將這些參數解釋為要調用的目標列表-否則將完全執行其他操作。
$ make env FOO=bar /usr/bin/uptime
HOSTNAME=434c34a12b25
PWD=/
_BASH_GPG_KEY=7C0135FB088AAF6C66C650B9BB5869F064EA74AB
HOME=/root
_BASH_VERSION=5.0
_BASH_PATCH_LEVEL=0
_BASH_LATEST_PATCH=0
TERM=xterm
SHLVL=0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
make: '/usr/bin/uptime' is up to date.
$ make badcmd env FOO=bar /usr/bin/uptime
bash: badcmd: command not found
make: *** [Makefile:90: badcmd] Error 127
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.