迁移到Qt5时,无法在子目录中定位头文件
Unable to locate the header files inside subdirectories while migrating to Qt5
我最近一直在从Qt 4.8.5迁移到Qt 5.3.0,以下是相关信息:
- Windows 7 32位
- Qt 3.1.1
- MSVC 2010编译器(我的两个Qt版本都是MSVC2010版的预编译包)
- Win7 SDK中的调试器
现在我被一个问题困住了,我一直得到编译错误:
致命错误C1083: Cannot open include file
从子目录中的头文件中取出,例如,#include "FooFolder/bar.h"
。编译器无法找到所有这些头文件,我完全困惑了,因为:
- 智能感应工作良好。
- 如果我改回旧的工具包Qt 4.8.5,它编译良好
- 两个套件使用相同的MSVC编译器。
这是我的.pro
文件:
QT += core gui script
QT += printsupport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MyApp
TEMPLATE = app
SOURCES += main.cpp
mainwindow.cpp
qcustomplot.cpp
dialogs/filterdialog.cpp
databox/databox.cpp
databox/datom.cpp
#... and more FooFolder/bar.cpp
HEADERS += mainwindow.h
qcustomplot.h
dialogs/filterdialog.h
databox/databox.h
databox/datom.h
#... and more FooFolder/bar.h
RESOURCES +=
resources.qrc
win32: LIBS += -LC:/ADLINK/UDASK/lib/ -lusb-dask
INCLUDEPATH += C:/ADLINK/UDASK/include
DEPENDPATH += C:/ADLINK/UDASK/include
include(qext/qextserialport.pri)
,这里是一个.h
文件,文件包括其他子目录头
#ifndef SETWINDOW_H
#define SETWINDOW_H
#include <QObject>
#include "databox/databox.h" // <---fatal error C1083: Cannot open include file
class SetWindow: public QObject
{
Q_OBJECT
public:
SetWindow();
public Q_SLOTS:
void setPointNum(int n);
void setStepSize(int s);
int getPointNum();
int getStepSize();
void requestSignal();
Q_SIGNALS:
void sendParameters(int p, int s);
private:
QString DynamicString;
DataBox *presentData;
int m_PointNum;
int m_StepSize;
};
#endif // SETWINDOW_H
和头文件未能包含:
#ifndef DATABOX_H
#define DATABOX_H
#include <QVector>
#include <QFile>
#include <QMap>
#include <QString>
#include "datom.h"
class Measurement
{
public:
Measurement();
void setNumChan(int n);
void setADRange(QString &s);
void setSamplingRate(int n);
void setTimeBase(double d);
int NumChan;
QString ADRange;
int SamplingRate;
double TimeBase;
};
class DataBox
{
public:
DataBox();
void setCurrentFile(QString path);
void loadData();
void cleanAll();
QVector<double>* py_0;
QVector<double>* py_1;
QVector<double>* ptimeStamp;
QVector<double>* pi_M;
QVector<double>* py_M;
QVector<double>* py_W;
QMap<double, double> AI_0;
QMap<double, double> AI_1;
QMap<int, double> AI0;
QMap<int, double> AI1;
double timeBase;
Measurement parameters;
QVector<Datom> *dataPoints;
private:
QString currentFile;
};
#endif // DATABOX_H
这些似乎是不正确的:
win32: LIBS += -LC:/ADLINK/UDASK/lib/ -lusb-dask
INCLUDEPATH += C:/ADLINK/UDASK/include
DEPENDPATH += C:/ADLINK/UDASK/include
1) 意味着它连接下一行,这不是你想要的。对于后面跟着空行的行来说,这不是问题,但是对于这里的
INCLUDEPATH
来说,这不是很好,如果你用一些包含来替换空行,你也可能会遇到其他行的问题。
2)您还需要将$$PWD
放入includepath以获得项目根目录"注册",因为您的包含应该从那里开始,而不是源代码的当前工作目录,因为您可以假设这不是正确的路由。
因此,你可以这样写:
win32: LIBS += -LC:/ADLINK/UDASK/lib/ -lusb-dask
INCLUDEPATH += $$PWD C:/ADLINK/UDASK/include
DEPENDPATH += C:/ADLINK/UDASK/include
相关文章:
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 重新定位图像时如何前进到下一个内存块
- 我怎样才能将所有子目录与 cmake 自动匹配
- 流填充字符的默认定位
- 使文件夹中的所有文件可供所有项目(子目录)访问
- 通过Python Distutils(用于Python C扩展)使用可重定位的设备代码编译CUDA代码
- 从所有列出的文件和子目录中更改目录
- 子目录之间的 CMAKE 共享变量
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- CMake:为什么added_subdirectory对其他子目录不可见
- NS3 - python.h 文件无法定位编译错误
- 获取每个目录或子目录中第一个文件的路径
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- Qt创建者:加载位于子目录中的项目文件
- GLEW 未在 MSYS2 上定位 OpenGL 函数
- c++ 链接器错误"针对'.rodata.str1.1'的重新定位R_X86_64_32"链接 CXX 共享库 libsrt.so
- CMake:防止在子目录库项目中生成测试可执行目标
- 如何忽略32位整数中的特定位
- 迁移到Qt5时,无法在子目录中定位头文件