qmake无法定位任何源文件或头文件。

4

我正在尝试将我的项目从一台安装了qt4的电脑转移到另一台新安装了qt5的电脑上,但我遇到了一个非常奇怪的问题。

qmake突然找不到我的任何源文件或头文件。

以下是一个最简示例:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = untitled
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

INCLUDEPATH += $$PWD/Dir/
DEPENDPATH += $$PWD/Dir/

HEADERS  += mainwindow.h \
    f.h \

FORMS    += mainwindow.ui

如果 Dir/f.h 存在于与 untitled.pro 相同的目录中。我从 qmake 获取以下输出:

05:18:45: Starting: "/opt/QtSDK/5.0.2/gcc/bin/qmake" 
/home/martin/Projects/untitled/untitled.pro 
-r -spec linux-g++ CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug
WARNING: Failure to find: f.h
05:18:45: The process "/opt/QtSDK/5.0.2/gcc/bin/qmake" exited normally.

我完全不知道是什么原因导致了这个问题。可能的问题是什么?

编辑:

当我手动像这样添加名称时:

HEADERS += Dir/f.h \

qmake 没有抱怨。


我不明白为什么你不理解。=) 如果f.h在文件夹Dir中,则需要将该文件的完整路径添加到其中。这就是为什么HEADERS += Dir/f.h有效的原因。这样说清楚了吗? - Son-Huy Pham
2
@Huytard但是以前我不需要这样做。我只需添加目录:DEPENDPATH += $$PWD/Dir/,然后我就不需要编写完整路径。为什么现在突然成为问题让我很生气。 - Martin Drozdik
2个回答

7

当我在pro文件中包含VPATH时,同样的问题被解决了。

例如: VPATH += ../../libraries/ INCLUDE += ../../libraries/

另外,在qt 5中我们不需要在pro文件中包含DEPENDPATH。


4
您没有定义PWD。双美元符号“$$”前缀表示在pro文件中先定义的qmake变量。在您的情况下,“$$PWD”部分完全不必要。如果您完全删除它,一切都应该可以编译。
编辑:此外,他们在Qt 5中悄悄更改了DEPENDPATH行为。从Qt 5开始,qmake现在默认使用您的INCLUDEPATH来查找SOURCES和HEADERS(config += depend_includepath)。只需删除DEPENDPATH行,您就应该没问题了。
INCLUDEPATH += "Dir"

参考资料: .pro 文件中的 Qmake 变量


谢谢,但结果是一样的。 - Martin Drozdik
去掉 f.h 后面的额外反斜杠可以解决这个问题吗? - Phlucious
不用介意,试着完全删除DEPENDPATH行并阅读这个链接:https://dev59.com/D2Qn5IYBdhLWcg3wg3eR - Phlucious
2
INCLUDEPATH与查找SOURCES/HEADERS文件无关,而是用于在编译时解析包含文件。HEADERS += Dir/f.h是正确的方法。在Qt4中,DEPENDPATH可能是一个意外的副作用。 - Frank Osterfeld

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