【发布时间】:2011-02-20 11:48:08
【问题描述】:
在 linux make 文件中:
我只想在编译成功的情况下运行输出程序。
有没有办法做到这一点?
【问题讨论】:
标签: linux unix makefile compilation conditional-compilation
在 linux make 文件中:
我只想在编译成功的情况下运行输出程序。
有没有办法做到这一点?
【问题讨论】:
标签: linux unix makefile compilation conditional-compilation
我能想到的最简单的方法看起来像这样......
run: program_name
./program_name
如果 program_name 不存在且无法编译,“make run”应该会失败。
【讨论】:
正如其他人所说,使用&&。例如:
$ make && ./a.out
有两件事可以使这项工作发挥作用;首先,在 UNIX 中有一个约定,所有成功的东西都返回 0(包括 C 程序)。有一个古老的笑话可以帮助您记住“罗马帝国的衰落是因为罗马人没有一个零来成功终止他们的 C 程序”。
其次,&& 是布尔“and”的“短路”版本。也就是说,它将评估其左侧的表达式,并且仅当它是0 时,它才会评估右侧的表达式。这也是Java 运算符&&(短路)和&(总是计算两个操作数)之间的区别。许多命令式语言都包含这两种运算符,以防布尔表达式的右侧操作数中存在副作用(例如 I/O、变量更新),在这种情况下,您肯定要计算这两个操作数。然而,有些人会说以这种方式嵌入副作用是不好的风格。
【讨论】:
make 成功返回 0,编译失败返回 2。我用 bash 尝试了以下操作
make && ./success
其中成功是生成的二进制文件的名称。
&& 保证第二个程序只有在第一个程序运行成功时才会执行。
【讨论】:
如果您构建的可执行文件名为a.out,那么您可以执行以下操作:
% make && ./a.out
【讨论】: