Linuxのmakefileの場合:
コンパイルが成功した場合にのみ出力プログラムを実行したい。
これを行う方法はありますか?
Linuxのmakefileの場合:
コンパイルが成功した場合にのみ出力プログラムを実行したい。
これを行う方法はありますか?
私が考えることができる最も簡単な方法は、このようになります...
run: program_name
./program_name
program_name が存在せず、コンパイルできない場合、「make run」は失敗するはずです。
make は成功すると 0 を返し、コンパイルが失敗すると 2 を返します。私はbashで次のことを試しました
make && ./success
ここで、success は生成されたバイナリの名前です。
&& は、最初の実行が成功した場合にのみ 2 番目のプログラムが実行されることを保証します。
他の人が言ったように、を使用して&&
ください。例えば:
$ make && ./a.out
これが機能する理由は 2 つあります。まず、UNIX には、成功したものはすべて 0 を返すという規則があります (C プログラムを含む)。これを思い出すのに役立つ古いジョークがあります。「ローマ帝国は、ローマ人が C プログラムを正常に終了させるためのゼロを持っていなかったため、崩壊しました」。
2 つ目&&
は、ブール型の "and" の "短絡" バージョンです。つまり、左側の式を評価し、そうである場合にのみ0
右側の式を評価します。&&
これは、Java 演算子(短絡) と&
(常に両方のオペランドを評価する)の違いでもあります。多くの命令型言語には、ブール式の右側のオペランドに副作用 (I/O、変数の更新など) がある場合に備えて、両方の種類の演算子が含まれています。この場合、両方のオペランドを確実に評価する必要があります。ただし、このように副作用を埋め込むのはスタイルが悪いと言う人もいます。
ビルドされた実行可能ファイルに名前が付けられている場合、次のa.out
ようなことができます。
% make && ./a.out