makeで「システムが指定されたファイルを見つけることができません」問題の正確な原因は何ですか?

makeで「システムが指定されたファイルを見つけることができません」問題の正確な原因は何ですか?

私の単純なMakefileは次のとおりです。

.exeを実行:リンク
    gcc link.o -o 実行

link.o: main.o fun.o
    ld -r main.o fun.o -o link.o

main.o: main.c
    gcc -cメイン.c -oメイン.o

fun.o: 関数 file.c
    gcc -c functionfile.c -o fun.o

きれい:
    デル*.o
    *.exeを削除

問題は、実際に "run.exe"を生成することに関するものではありません。これを生成する方法はいくつかあります。ところで、**Makefile**を作成するときに、誤って「run.exe」に依存する「link」の後に「.o」を書くことを忘れていました。指す):
gcc -c main.c -o main.o
gcc -c functionfile.c -o fun.o
ld -r main.o fun.o -o link.o
cc   link.o   -o link
process_begin: CreateProcess(NULL, cc link.o -o link, ...) failed.
make (e=2): The system cannot find the file specified.
<builtin>: recipe for target 'link' failed
make: *** [link] Error 2

見つからないと言うファイルは、link以前に存在しておらず、ファイルを生成するMakefileコマンドがなかったためです。私の質問は、linkターゲット2、3、4のコマンドが見つからない場合は、どのように正常に実行して.oファイルを作成できるかということです。linkコマンドを実行せずにieが見つからない場合でも返されないのはなぜですか?私の推測が正しいか間違っている場合は、整理してください、実際に何が起こっているのか、何が問題なのか教えてください! ! ?recipe for target 'link' failed名前付きのターゲットがないので、これは何ですかlink

答え1

問題は最初の行で発生しますMakefile

run.exe: link

これにより、MakeはItを生成する方法を見つけようとしますlinklink作る方法を知るlink.oそのため、提供されたルールを使用して作成し、参照する組み込みlink.oルールlinkを使用して作成しようとしますcc。ただし、コマンドがないためcc.exe失敗します。そしてそれは欠けているファイルです。これらのすべては、「<builtin>:Recipe for target 'link' failed」エラーメッセージを説明します。link組み込みルールを使用して作成中にMakeが失敗しました。

この問題を解決するには、正しい前提条件を指定してください。

run.exe: link.o
    gcc $^ -o $@

これは、ルール内の情報の重複を避けるために自動変数を使用します。$^「すべての前提条件」(link.o)、$@「ターゲットファイル名」(run.exe)。

関連情報