【问题标题】:linux/unix and makefileslinux/unix 和 makefile
【发布时间】:2011-02-20 11:48:08
【问题描述】:

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

有没有办法做到这一点?

【问题讨论】:

    标签: linux unix makefile compilation conditional-compilation


    【解决方案1】:

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

    run: program_name
            ./program_name
    

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

    【讨论】:

      【解决方案2】:

      正如其他人所说,使用&&。例如:

      $ make && ./a.out
      

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

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

      【讨论】:

        【解决方案3】:

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

        make && ./success
        

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

        【讨论】:

          【解决方案4】:

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

          % make && ./a.out
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-10-08
            • 2011-05-05
            • 2013-08-10
            • 2011-05-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多