0

メイクファイルを使用すると、次のエラーが発生します。

make: Warning: File `makefile' has modification time 56 s in the future
make: Circular Menu.o <- Menu.o dependency dropped.
g++ a.out main.o Menu.o CourseList.o Course.o LecturerList.o StudentList.o Lecturer.o Student.o -o a.out
make: warning:  Clock skew detected.  Your build may be incomplete.

これは私のメイクファイルです:

a.out: main.o Menu.o CourseList.o Course.o LecturerList.o StudentList.o Lecturer.o Student.o
g++ main.o Menu.o CourseList.o Course.o LecturerList.o StudentList.o Lecturer.o Student.o -o a.out

main.o: main.cpp Lecturer.o LecturerList.o Student.o StudentList.o Course.o CourseList.o Menu.o
g++ -c main.cpp

Menu.o: Menu.o Lecturer.o LecturerList.o Student.o StudentList.o Course.o CourseList.o
g++ -c Menu.cpp

CourseList.o: CourseList.cpp
g++ -c CourseList.cpp

Course.o: Course.cpp
g++ -c Course.cpp

LecturerList.o: LecturerList.cpp
g++ -c LecturerList.cpp

StudentList.o: StudentList.cpp
g++ -c StudentList.cpp

Lecturer.o: Lecturer.cpp
g++ -c Lecturer.cpp

Student.o: Student.cpp
g++ -c Student.cpp

エラーはどこにあり、どうすれば修正できますか? 少し紛らわしいかもしれませんが、ここの誰かがこの問題を解決してくれることを願っています。これについて何時間も頭を悩ませています...ありがとう!!

注: エラーとメイクファイルを編集しました。今、私には1つの問題しかありません

4

4 に答える 4

3

まず、「ファイル 'makefile' の修正時刻は 56 秒後です」という問題は、sysadmin の問題です。ファイルをネットワーク ファイル システムに保存しています。お使いのコンピューターとサーバー コンピューターの現在時刻が一致していません。これを修正するには、一方または両方のコンピューターの日付を調整して、一致するようにします。その合意を維持するには、「ntpd」などを使用します。

第 2 に、循環依存は、Makefile で ".o" と ".cpp" ファイルを混同しているためです。.o具体的には、他のファイルのソース依存関係としてファイルをリストしていますが.o、これは (ほとんど) ありません。Menu.o: Menu.oはそのような循環依存の 1 つです。

第 3 に、「ファイル a.out が見つかりません」というメッセージは、リンカ コマンド ラインで入力ファイルと出力ファイルの両方として「a.out」を指定しているためです。

Makefile の 1 つの修正済みバージョンを次に示します (これをコピーしてエディターに貼り付ける場合は、タブを修正することを忘れないでください)。

a.out: main.o Menu.o CourseList.o Course.o LecturerList.o StudentList.o Lecturer.o Student.o
  # Lose extraneous "a.out" on the next line.
  g++ main.o Menu.o CourseList.o Course.o LecturerList.o StudentList.o Lecturer.o Student.o -o a.out

# Get rid of all '.o' in the next line. They don't make any sense.
main.o: main.cpp 
  g++ -c main.cpp

# Change "Menu.o" to "Menu.cpp" and get rid of other .o files
Menu.o: Menu.cpp
  g++ -c Menu.cpp

CourseList.o: CourseList.cpp
  g++ -c CourseList.cpp

Course.o: Course.cpp
  g++ -c Course.cpp

LecturerList.o: LecturerList.cpp
  g++ -c LecturerList.cpp

StudentList.o: StudentList.cpp
  g++ -c StudentList.cpp

Lecturer.o: Lecturer.cpp
  g++ -c Lecturer.cpp

Student.o: Student.cpp
  g++ -c Student.cpp

最後に、パターン ルールと自動変数を使用すると、Makefile をよりシンプルで読みやすくすることができます。

これははるかに短いバージョンです:

a.out: main.o Menu.o CourseList.o Course.o LecturerList.o StudentList.o Lecturer.o Student.o
  g++ $^ -o a.out

# Take advantage of Makefile's pattern match to avoid specifying every. single. file.
%.o: %.cpp 
  g++ -c $<


参照: http://www.gnu.org/software/make/manual/make.html

于 2012-04-05T15:30:27.870 に答える
0

2 行目:

g++ a.out main.o Menu.o CourseList.o Course.o LecturerList.o StudentList.o Lecturer.o Student.o -o a.out

にコンパイルしようとしていa.outますa.out

于 2012-04-05T15:25:56.027 に答える
0

私はあなたが欲しいと思います

g++ -o a.out ...

いいえ

g++ a.out ...

また、Menu.o が Menu.o に依存しないようにすることで、循環性の警告を取り除くことができます。

于 2012-04-05T15:26:53.070 に答える
0

この線

Menu.o: Menu.o Lecturer.o LecturerList.o Student.o StudentList.o Course.o CourseList.o

Menu.oの必要条件としてリストされますMenu.o

a.outリストされているのは、出力をそこに送りたいことを示すために使用する必要がある入力ですg++-o

于 2012-04-05T15:29:24.957 に答える