我有一个生成两个输出的规则,如何在规则的命令中指定特定输出。
在本例中,我有一个测试规则,它使用构建的可执行文件来创建文件。我然后 想要打开文件作为预览。
我看到了使用 $out1 来指定第二个输出的参考,但这在 osx 上不起作用。
rule test3_r
command = ./$in > $out1; open $out1
# command = ./$exefile > out.gif
# command = "./$exefile > out.gif; open out.gif"
description = "tests by making gif and then display"
# test 3
build $
test3 $
out.gif $
: test3_r $exefile
输出:
❯ ninja test3
[1/1] "tests by making gif and then display"
FAILED: test3 out.gif
./lissajous > ; open
/bin/sh: -c: line 0: syntax error near unexpected token `;'
/bin/sh: -c: line 0: `./lissajous > ; open '
ninja: build stopped: subcommand failed.
作为一种解决方法,这是可以完成的,但它并没有回答如何在构建规则中指定特定输出的原始问题。在本例中,我使用隐式输出语法。然而,隐式输出实际上应该是 out.gif,而不是虚假输出 test3。如果这样做的话 那么 out.gif 不在 $out 中。
另请注意,一份参考文献中的implicit=out.gif 语法现在似乎不可用。
rule test3_r
command = ./$in > $out; open $out
description = "tests by making gif and then display"
# implicit = out.gif
build $
out.gif $
| test3 $
: test3_r $exefile
指定任一输出目标的结果都会打开 gif。
❯ ninja out.gif
[1/1] "tests by making gif and then display"
和
❯ ninja test3
[1/1] "tests by making gif and then display"