0

在 linux make 文件中:
我只想在编译成功的情况下运行输出程序。

有没有办法做到这一点?

4

4 回答 4

5

我能想到的最简单的方法看起来像这样......

run: program_name
        ./program_name

如果 program_name 不存在且无法编译,“make run”应该会失败。

于 2010-05-17T16:09:21.593 回答
3

make 成功返回 0,编译失败返回 2。我用 bash 尝试了以下操作

make && ./success

其中成功是生成的二进制文件的名称。
&& 保证第二个程序只有在第一个程序成功运行时才会执行。

于 2010-05-17T16:39:10.060 回答
3

就像其他人说的那样,使用&&. 例如:

$ make && ./a.out

有两件事可以使它起作用;首先,在 UNIX 中有一个约定,所有成功的东西都返回 0(包括 C 程序)。有一个古老的笑话可以帮助您记住“罗马帝国的衰落是因为罗马人没有一个零来成功终止他们的 C 程序”。

其次,&&是布尔“与”的“短路”版本。也就是说,它将评估其左侧的表达式,并且仅当0它评估右侧的表达式时。这也是 Java 运算符&&(短路)和&(总是计算两个操作数)之间的区别。许多命令式语言都包含这两种运算符,以防布尔表达式的右侧操作数中存在副作用(例如 I/O、变量更新),在这种情况下,您肯定要计算两个操作数。然而,有些人会说以这种方式嵌入副作用是不好的风格。

于 2010-05-17T17:17:26.833 回答
1

如果您构建的可执行文件被命名a.out,那么您可以执行以下操作:

% make && ./a.out
于 2010-05-17T16:03:54.653 回答