makefile を正しくコンパイルして実行するにはどうすればよいですか?

プログラムが最新かどうかに応じて「実行」ターゲットを単純化し、プログラムを実行するだけです。

run:    ${PROGRAM_NAME}
        ./${PROGRAM} ${ARGS}

make を実行してもあまり意味がありません すでに make を実行している場合 - 少なくとも、このコンテキストではありません。おそらく再帰操作 (異なるディレクトリでの) の場合ですが、「再帰は有害であると見なす」を参照してください。

また、makefile は通常、ターゲット 'all を提供する必要があります。 ' 通常は最初の、したがってデフォルトのターゲットにする必要があります。


makefile から実行するのは少し特殊です。おそらく、一部の IDE が提供する「コンパイルして実行」メニュー項目を複製しようとしていますか? Make はそれを行うには十分な準備ができていません。

ターゲット コマンドで発生するすべてのことは、端末に直接接続されていないサブプロセスで発生します。これが、make がキー ストロークを受け取る理由です。

注目すべきもう 1 つの点:通常、オブジェクト ファイルから実行可能ファイルへの段階 (リンク) では、別のフラグ セット (LDFLAGSLIBS ) 次に、コンパイル段階。この単純な例では問題なく実行できますが、より複雑なケースで使用するためにこの makefile をコピーすると、問題が発生します。


何度もビルドして実行する場合は、 history を使用できます これを支援するコマンド:

# Run this once
make && ./foo

# Repeat last command
!!