Qt编译器警告:覆盖目标的命令/忽略目标的旧命令。

54

当我为Windows编译我的Qt项目时,我收到了这两个警告:

Makefile.Debug:109: warning: overriding commands for target `debug/moc_mainwindow.cpp'
Makefile.Debug:106: warning: ignoring old commands for target `debug/moc_mainwindow.cpp'

我认为它们表示我的项目配置存在一些问题,问题是什么,我该如何解决?


只需进行一次干净的构建,这些问题就会消失。 - ismail
4个回答

119

我曾经遇到过同样的错误,也许你的问题来源不同,但我还是会写出来。 在我的 *.pro 文件中,它是这样的:

SOURCES += main.cpp\
    mainwindow.cpp\
    serialHelper.cpp \
serialHelper.cpp

HEADERS  += mainwindow.h\
     += serialHelper.h \
serialHelper.h \
typeDefinitions.h

cpp和头文件重复了。我删除了重复的包含,问题得到解决。


8
你把我从很多挫折中解救出来了。 - nkint
4
我也遇到了这个问题,在子目录中发生了同样的情况。 - reggie
4
请注意,重复可能是因为两个文件具有相同的名称,并且在不同的包含的.pri文件中都被提到了。 - Troyseph

17

在很多情况下,这个错误与QMake把所有对象文件放在构建目录的一个扁平文件夹中有关,如果两个源文件具有相同的名称,即使它们可能在不同的文件夹中,也会导致问题。比如:

在许多情况下,这个错误是由于QMake只是将所有对象文件放在构建目录中的一个平面文件夹中,如果两个源文件具有相同的名称,即使它们可能位于不同的文件夹中,也会导致问题。

SOURCES += foo.cpp
SOURCES += bar.cpp
SOURCES += bla/foo.cpp
SOURCES += bla/bar.cpp

在这种情况下,QMake会抱怨foo.o和bar.o两个文件。

解决这个问题的方法是添加

CONFIG += object_parallel_to_source

将此行代码添加到 .pro 文件中,这会导致构建文件夹镜像源树的文件夹层次结构。不确定为什么这不是默认设置。

问题和解决方案以前在这里提出过,但没有在讨论线程中讨论警告消息的上下文中提到。


9

make clean 然后 make 可以解决这个问题。 :) (或在Qt Creator中右键单击项目 -> 清理,然后在Qt Creator中右键单击项目 -> 重建)。

如果这样仍然不行,可以手动删除makefile并重新构建项目。


4
如果这个方法不能解决问题,那么很可能是在你的.pro文件的HEADERS变量中列出了多个mainwindow.h文件。请检查一下。 - Caleb Huitt - cjhuitt
谢谢,事实证明我确实将它列了两次。我该如何将您的答案标记为正确答案?或者我应该标记父级别的答案? - sashoalm

2
我也遇到了同样的问题——Makefile两次包含相同的.cpp和.h文件,导致出现“Multiple definition of <class/function> first defined here”错误。
结果发现,这些相关的.cpp和.h文件已经作为qwtfunctions添加进去了,除此之外还在*.pro文件中。所以如果以上方法都不起作用,请检查一下qwtfunctions。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接