制造是我了解与否之间往返的技术之一。
这肯定是一个例子,我知道我一定做错了,因为Make是为了使这些任务减少重复而开发的。
all: 24.1 24.2 24.3
24.1:
evm install emacs-24.1-bin || true
emacs --version
emacs --batch -L . -l ert -l test/tests.el -f ert-run-tests-batch-and-exit
24.2:
evm install emacs-24.2-bin || true
emacs --version
emacs --batch -L . -l ert -l test/tests.el -f ert-run-tests-batch-and-exit
24.3:
evm install emacs-24.3-bin || true
emacs --version
emacs --batch -L . -l ert -l test/tests.el -f ert-run-tests-batch-and-exit
如何编辑此Makefile以仅安排一次测试序列,但能够针对多个版本进行测试?
尝试一下:
VERSIONS = 24.1 24.2 24.3
all :: $(VERSIONS)
$(VERSIONS) ::
evm install emacs-$@-bin || true
emacs --version
emacs --batch -L . -l ert -l test/tests.el -f ert-run-tests-batch-and-exit
::
是一种特殊的规则,它将目标设置为虚假(也具有其他属性)。
怎么样:
all: 24.1 24.2 24.3
%:
evm install emacs-$@-bin || true
emacs --version
emacs --batch -L . -l ert -l test/tests.el -f ert-run-tests-batch-and-exit
[我必须承认,转向“不得已而为之”的策略总是让我感到不安:感觉好像与工具的本质背道而驰。另一方面,BSD make允许显式循环构造,因此摆脱重复的规则很简单:
VERSIONS = 24.1 24.2 24.3
all: ${VERSIONS}
.for VERSION in ${VERSIONS}
${VERSION}:
evm install emacs-${VERSION}-bin || true
emacs --version
emacs --batch -L . -l ert -l test/tests.el -f ert-run-tests-batch-and-exit
.endfor
我很清楚,这种解决方案几乎肯定不会对您有任何帮助;切换make实施几乎可以肯定。虽然BSD make的代表性非常低,所以我认为其他人备有替代文件可能对您有用。
正如MadScientist正确指出的那样,GNU make不支持BSD make特有的.for
之类的“点构造”。但是,此问题提出了一些其他可能适用于GNU make的循环技术:How to write loop in a Makefile?