web-dev-qa-db-ja.com

makefile --make:***ターゲットをすべてにするルールはありません。やめる

しばらくの間、正しいmakefileを作成しようとしていますが、「make:***ターゲットを「すべて」にするルールがありません。停止してください」というエラーが表示され続けます。

私は1つのメインプログラムを持っています:mpasswdsort.cとcファイルはmpasswdsortによって使用され、ヘッダーも付属しています:list.cとlist.h

私のメイクファイル:

CC=gcc
CFLAGS=-Wall -pedantic -ansi
all: mpasswdsort
server: mpasswdsort.o list.o
    $(CC) mpasswdsort.o list.o -o mpasswdsort
mpasswdsort.o: mpasswdsort.cpp
    $(CC) $(CFLAGS) mpasswdsort.cpp
list.o: list.cpp
     $(CC) $(CFLAGS) list.cpp
clean:
    rm -f server client *.o core

Makefileが間違っているのか、それともmakefilが.txtファイルであると想定されていないのかわかりません。

3
kalle konsida

表示されるエラーメッセージは、makeにターゲット「all」を構築するためのルールが表示されないことを示しています。これは、メイクファイルがまったくない場合にGNU makeが発行する診断とまったく同じです。提示するメイクファイルの内容はdoのルールが含まれているためです。 「すべて」をターゲットにすると、makeはそれらを認識していないと結論付けます。

これは、makefileが別のディレクトリにあるためである可能性があります。これは、その名前がデフォルトでmakeが試行するものとは異なるためです(Makefileまたはmakefileは従来型です。GNUのバージョンのmakeGNUmakefile)もチェックします。または、アクセス制御の問題によりmakeがファイルを読み取れないためです。あなたが発言したので

Makefileが間違っているのか、それともmakefilが.txtファイルであると想定されていないのかわかりません。

、最も可能性の高い結論は、(少なくとも)ファイル名が間違っているということです。 Makefileはテキストファイルですが、テキストファイル名は必ずしも「.txt」で終わるとは限りません。実際、Linuxやその他のUNIXでは、ほとんどのUNIXはそうではありません。メイクファイルにはそのような拡張子を付けないでください。ただし、技術的には、-fオプションを使用して、使用するメイクファイルの名前をmakeに指示できます。

3
John Bollinger