Shell

makefile 外殼模式擴展:如何?

  • March 4, 2010

我發現了 make 的一個有趣的“功能”

DIR_INPUT=/測試
測試:
# 測試日期(應該是昨天)
測試 !-z "${日期}"
ls -lad ${DIR_INPUT}/{a,c}

但它似乎以一種奇怪的方式工作:

PROMPT# 進行測試
# 測試日期(應該是昨天)
測試 !-z“20100120”
ls -lad /test/{a,c}
/test/{a,c}:沒有這樣的文件或目錄
*** 錯誤程式碼 2
製作:致命錯誤:目標“測試”的命令失敗
迅速的#

當然,如果我從我的 shell 作品中發出ls -lad /test/{a,c} 。

問題:如何讓 make 像 shell 一樣評估這種模式?

您可以使用 shell 函式 $(shell touch {a..c}) 來執行此操作,(也可以使用萬用字元函式?):

kbrandt@kbrandt-opadmin:~/scrap/make$ ls
foo
kbrandt@kbrandt-opadmin:~/scrap/make$ vim foo
kbrandt@kbrandt-opadmin:~/scrap/make$ ls
foo
kbrandt@kbrandt-opadmin:~/scrap/make$ cat foo
files:
   $(shell touch {a..c})
kbrandt@kbrandt-opadmin:~/scrap/make$ make -f foo
make: `files' is up to date.
kbrandt@kbrandt-opadmin:~/scrap/make$ ls
a  b  c  foo
kbrandt@kbrandt-opadmin:~/scrap/make$

引用自:https://serverfault.com/questions/119209