我不知道有現成的東西給你想要的東西在GNUmake中(基於你的鏈接,我假設我們正在談論這種味道)。你可以以某種方式效仿它,但恐怕沒有解決方案會是完美的。
使用調試標誌
make --debug=j mytarget
會讓它即將推出,包括觸發它的目標的每個命令make
輸出信息。在你的情況,結果將是:
Live child 0x021d2360 (mytarget) PID 10747
echo Hello World!
Hello World!
Reaping winning child 0x021d2360 PID 10747
Removing child 0x021d2360 PID 10747 from chain.
你有信息,但它不是真的很漂亮,我想平行運行(-j
選項)不會產生正確的輸出。
更改SHELL
可以設置SHELL
變量告訴用於啓動命令make
其解釋被認爲。在實際啓動命令之前,這可以用於(ab)執行回聲。在Makefile中的以下行
SHELL=/bin/sh -c 'echo -n "[[email protected]]: " && [email protected]'
我們得到
echo "Hello World!"
[mytarget]: "Hello World!"
這是不完美的,因爲整條生產線的回聲由make
直接完成,因此不會通過SHELL
影響改變命令本身
如果你可以自己修改命令,可以讓make
擴大它們從而使最終輸出是你想要什麼:
[email protected] -n '[[email protected]]: ' && echo $(1) && echo -n '[[email protected]]: ' && $(1)
.PHONY: all bla
mytarget:
$(call echo_target, echo "Hello World!")
將導致
[mytarget]: echo Hello World!
[mytarget]: Hello World!
但這需要添加call
到你的Makefile的每個命令
更新:在縫合一起
正如Natan Reisner所述,上面提出的SHELL
命令對於參數包含空格。作爲事實上,它也發生在我,你可以使用SHELL
啓動命令之前做呼應:下面是含有空格的參數工作,一個新的建議,並回用[email protected]
命令前綴:
SHELL=/bin/sh -c 'echo -n "[[email protected]] " && echo "[email protected]" && echo -n "[[email protected]] " && eval "[email protected]"'
以下目標
mytarget:
echo 'Hello World!'
@touch foo\ bar
@ls -l "foo bar"
我們得到這樣的結果
echo 'Hello World!'
[mytarget] echo 'Hello World!'
[mytarget] Hello World!
[mytarget] echo foo\ bar
[mytarget] foo bar
[mytarget] touch foo\ bar
[mytarget] [mytarget] ls -l "foo bar"
[mytarget] -rw-rw-r-- 1 virgile virgile 0 juil. 23 08:44 foo bar
注意,還有一個是起訴不產生任何輸出的命令,如觸摸。這可能可以通過將命令的輸出重定向到一個變量中進行緩解,並且只有在得到的長度不爲零時纔會回顯。
該指令是'.PHONY:mytarget'。只是FYI。 –
感謝您捕捉那個Etan,現在就糾正! – zsepi