根據Gnu Make Manual和GNU Makefile - Pattern rule with multiple targets with one dependency ignores all targets but the first,具有多個目標的模式規則表現出不同於正常規則。後者相當於多個規則,每個規則只有一個目標。因爲我正在設計一個像make這樣的工具,我想知道這種不同行爲背後的基本原理,爲什麼這兩種規則都不會使用相同的邏輯呢?GNU Makefile - 爲什麼具有多個目標的模式規則的行爲與正常規則有所不同?
編輯:
例如,我有一個Makefile:
%.md %.ps: %.tex
echo "rule 1"
doc1.tar.gz: doc1.md doc1.ps
echo "rule 2"
doc2.md doc2.ps: doc2.tex
echo "rule 3"
doc2.tar.gz: doc2.md doc2.ps
echo "rule 4"
make doc1.tar.gz
給我:
echo "rule 1"
rule 1
echo "rule 2"
rule 2
但給我:
echo "rule 3"
rule 3
echo "rule 3"
rule 3
echo "rule 4"
rule 4
我的問題是:爲什麼規則1不能像規則3那樣運行兩次?如果這種模式規則運行多次,會出現什麼問題?
我需要在日常工作中做很多數據處理,這樣的任務經常涉及各種腳本語言中的許多代碼片段,例如python,ruby,R等等。如果有像make這樣的工具可以粘合所有代碼片段都放到一個文件中並自動解析依賴關係。 GNU Make主要用於C/C++項目,對於數據處理來說太複雜了,我發現[Drake](https://github.com/Factual/drake)非常適合我的情況。然而,Drake是用Clojure編寫的,即使有滴漏,啓動時間也非常緩慢,而且由於我對Clojure知之甚少,所以很難延長。 –