私の単純な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を生成する方法を見つけようとしますlink
。link
作る方法を知る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
)。