代码之家  ›  专栏  ›  技术社区  ›  Betamoo

linux/unix和makefiles

  •  0
  • Betamoo  · 技术社区  · 14 年前

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

    有办法吗?

    4 回复  |  直到 14 年前
        1
  •  3
  •   snim2    14 年前

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

    $ make && ./a.out
    

    有两件事可以使这项工作正常进行;首先,在Unix中有一个约定,所有成功的事情都返回0(包括C程序)。有一个古老的笑话可以帮助你记住这一点:“罗马帝国垮台是因为罗马人没有一个零来成功地终止他们的C程序。”

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

        2
  •  5
  •   cHao    14 年前

    我能想到的最简单的方法是…

    run: program_name
            ./program_name
    

    如果程序名不在并且无法编译,“make run”应该失败。

        3
  •  3
  •   josefx    14 年前

    编译成功时返回0,编译失败时返回2。我用bash尝试了以下方法

    make && ./success
    

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

        4
  •  1
  •   Paul R    14 年前

    如果生成的可执行文件名为 a.out 然后你可以这样做:

    % make && ./a.out