0

このメイク ファイルで、「'Main.o' が必要とするターゲット '/Main.cpp' を作成するルールがありません」というエラーが発生し続ける

    HOME = /home/
    CC = g++ -Wall -pedantic
    PROJ = $(HOME)/Proj1
    INCL = -I $(PROJ)
    all: main.x
    main.x: List.o Summary.o Main.o
    < TAB >:$(CC) -o main.x List.o Summary.o Main.o
    List.o: $(PROJ)/List.h $(PROJ)/List.cpp
    < TAB >$(CC) -c $(INCL) $(PROJ)/List.cpp

    Summary.o: $(PROJ)/Summary.h $(PROJ)/Summary.cpp
    < TAB >$(CC) -c $(INCL) $(PROJ)/Summary.cpp


    Main.o: $(PROJ)/Main.cpp
    < TAB >$(CC) -c $(INCL) $(PROJ)/Main.cpp
    clean:
    < TAB >rm -rf *.o *~ *.x

ありがとう!

4

2 に答える 2

1

私が見る可能性は2つあります。1 つ目は、PROJ 変数定義の末尾に不要な空白があることです。make では、行末の余分な空白はすべて保持されます。したがって、これを書くと:

PROJ = $(HOME)/Proj1   # some whitespace at the end

変数の値は次のようになります'$(HOME)/Proj1 '(スペースを含みますが、引用符はありません)。次に、前提条件リストで使用する場合:

Main.o: $(PROJ)/Main.cpp

次のように展開されます。

Main.o: $(HOME)/Proj1   /Main.cpp

これは、ディレクトリと存在しないファイルという 2 つの異なる前提条件です/Main.cpp

そうでない場合は、表示された makefile は、使用している makefile とは実質的に異なります。表示された makefile はそのエラーを表示しないはずだからです。

于 2013-09-16T19:26:09.967 に答える
0

/home/Proj1/Main.cpp が存在することを確認してください。存在しない場合、Makefile は正常に見えます。$(PROJ)/Main.cpp は /home/Proj1/Main.cpp を指します

于 2013-09-16T17:30:57.860 に答える