使用makefile时出现此错误:
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.
这是我的makefile:
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
错误在哪里,如何解决? 我知道这可能会让人感到困惑,但我希望有人可以帮助我解决这个问题,我已经打了几个小时...... 谢谢!
注意: 我编辑了错误和makefile。现在我只有一个问题
答案 0 :(得分:3)
首先,“文件'makefile'在将来修改时间为56秒”的问题是系统管理员问题。您将文件存储在网络文件系统中。您的计算机和服务器计算机不同意它的时间。要解决此问题,请调整一台或两台计算机上的日期,以便他们同意。要维持该协议,请使用类似“ntpd”的内容。
其次,循环依赖是因为你在Makefile中混淆了“.o”和“.cpp”文件。具体来说,您将.o
个文件列为其他.o
文件的源依赖项,这几乎不是这种情况。 Menu.o: Menu.o
就是这样的循环依赖。
第三,“找不到文件a.out”消息是因为您在链接器命令行上将“a.out”指定为输入和输出文件。
以下是Makefile的一个固定版本(如果将其复制粘贴到编辑器中,请不要忘记修复标签。)
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
答案 1 :(得分:0)
第二行:
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
答案 2 :(得分:0)
我想你想要
g++ -o a.out ...
不是
g++ a.out ...
你也可以通过没有Menu.o取决于Menu.o
来摆脱循环警告答案 3 :(得分: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
来表示您希望输出到那里。