2012-10-09 53 views
2

Makefile的我可以定義任務,使用戶可以指定哪些他/她想要做的是:任務型語言替代Makefile文件

make run 
make serve 
make deploy 
.. 

這似乎是工作好,但我覺得Makefile對於所有這些依賴性分析和相對模糊的語法/執行來說,這是一個矯枉過正的目的。是否有任何專門爲此目的而設計的語言/工具最適用於大多數系統?或任何想法如何使用bash爲此目的?

+0

如果您不需要依賴關係分析,也許您真正需要的是您選擇的語言中的「switch」語句。 – ArjunShankar

+0

你有沒有考慮過爲每個命令創建一個可執行的bash文件?然後你的用戶可以輸入'run'' serve'' deploy'等。你可以使用內置的'source'來從其他文件導入庫函數,設置,配置等。 – rici

+1

你編譯源代碼嗎?如果是的話,我認爲依賴分析是沒有必要的。 – uzsolt

回答

4

所以阿瓊的建議後,我想出了一個sh腳本:

#!/usr/bin sh 

# only one task at a time 
if [ $# != 1 ]; then 
    echo "usage: $0 <task_name>" 
fi 

run() { 
    echo "I'm now running" 
} 

serve() { 
    echo "I'm now serving" 
} 

deploy() { 
    echo "I'm now deploying" 
} 

case $1 in 
    "run")  run;; 
    "serve")  serve;; 
    "deploy")  deploy;; 
esac 

這是比我想象的要容易得多。我有一個名爲文件task所以,現在我可以爲運行的任務:

$ sh task serve 
I'm now serving 

,或者如果該文件是可執行文件:

$ ./task deploy 
I'm now deploying 

只是有在switch聲明有點重複,但它不夠好爲了我。如果它可以變得更好,請隨時給我評論。

+1

看起來很像一個initscript(即'/ etc/init.d/*'或'/ etc/rc.d/*')。如果你想要風格的建議,也許你可以偷看其中的一個文件;) – ArjunShankar

+0

@ArjunShankar的確的確如此,看起來像我已經徹底改變了車輪.. – none

+0

不時重塑車輪並不是一件壞事。它加深了你對車輪的理解。 – Beta