使用 ninja 构建系统如何在规则中指定特定输出?

问题描述 投票:0回答:1

我有一个生成两个输出的规则,如何在规则的命令中指定特定输出。

在本例中,我有一个测试规则,它使用构建的可执行文件来创建文件。我然后 想要打开文件作为预览。

我看到了使用 $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.
ninja
1个回答
0
投票

作为一种解决方法,这是可以完成的,但它并没有回答如何在构建规则中指定特定输出的原始问题。在本例中,我使用隐式输出语法。然而,隐式输出实际上应该是 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"
© www.soinside.com 2019 - 2024. All rights reserved.