簡體   English   中英

Makefile-包羅萬象的目標

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM