我正在尝试为已创建的库创建一个GUI应用程序,该应用程序位于GUI应用程序文件夹以外的其他位置。
层次结构如下:
Main project
Main Project
<sources>
Qt Project
GUIAPP
并且.pro文件配置如下:
#-------------------------------------------------
#
# Project created by QtCreator 2015-09-18T10:56:00
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
TARGET = Ann_network
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
qcustomplot.cpp \
../../ArtificialNeuralNetworksProject/Layer.cpp \
../../ArtificialNeuralNetworksProject/Matrix.cpp \
../../ArtificialNeuralNetworksProject/Network.cpp \
../../ArtificialNeuralNetworksProject/Neuron.cpp
HEADERS += mainwindow.h \
qcustomplot.h \
../../ArtificialNeuralNetworksProject/Layer.h \
../../ArtificialNeuralNetworksProject/Matrix.h \
../../ArtificialNeuralNetworksProject/Network.h \
../../ArtificialNeuralNetworksProject/Neuron.h
FORMS += mainwindow.ui
然而,当我尝试编译源代码时,它会收到错误:
:-1: error: dependent '..\..\..\Artificial Neural Networks Project\Neuron.h' does not exist.
我需要说的是,在代码中没有使用上面的字符串。
我使用指令命令的唯一地方是mainwindow.cpp(GUI apps sourcecode),如下所示:
#include "../../ArtificialNeuralNetworksProject/Neuron.h"
#include "../../ArtificialNeuralNetworksProject/Layer.h"
#include "../../ArtificialNeuralNetworksProject/Network.h"
这是什么问题?我该如何解决这个问题?
答案 0 :(得分:1)
您似乎尚未正确配置* .pro文件。您说您正在尝试包含已编码的库。
但是您在代码中包含了此库的源代码和标题,因此它并不是一个独立的库。你知道吗?我想明确这一点,因为我不知道它是否与你相关。在我看来,构建DLL并在GUI中包含标题是正确的方法。但是,如果您没有足够的依赖经验,那么将您的库复制/粘贴到项目中会更容易。
话虽这么说,我建议移动你的文件夹&#39; ArtificialNeuralNetworksProject&#39;在* .pro文件的同一级别,并将其更改为:
HEADERS += mainwindow.h \
qcustomplot.h \
ArtificialNeuralNetworksProject/Layer.h \
...
SOURCES相同。您应该阅读QMAKE的文档:http://doc.qt.io/qt-5/qmake-variable-reference.html#includepath
INCLUDEPATH
指定编译项目时应搜索的#include目录。
如果您不想更改文件系统上的文件夹,总会有一个解决方案。但是,让依赖文件不在其他源代码所在的目录中对我来说似乎不正常。
ArtificialNeural = C:/Users/<you>/<some path>/ArtificialNeuralNetworksProject/
INCLUDEPATH += $$PWD
INCLUDEPATH += $$ArtificialNeural
编辑:所以如果您计划制作一个或多个DLL,那么您可以执行以下项目结构:
Project
├─────LibA
├─────LibB
└─────MainGUI
<强> Project.pro:强>
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += LibA \
LibB \
MainGUI
LibA.pro 和LibB.pro等等:
DEFINES += LIB_A
TEMPLATE = lib
<强> MainGUI.pro:强>
TEMPLATE = app
LIBS += -L$$OUT_PWD/../LibA/ -lLibA -L$$OUT_PWD/../LibB/ -lLibB
( or -L$$OUT_PWD/../LibA/{debug|release}/ )
INCLUDEPATH += $$PWD/../LibA $$PWD/../LibB
DEPENDPATH += $$PWD/../LibA $$PWD/../LibB
对于MSVC,您必须明确处理导入/导出的符号。因此,在您要编写的每个共享库中,创建一个小标题:
<强> lib_a_global.h:强>
#ifndef LIBRARY_GLOBAL_H
#define LIBRARY_GLOBAL_H
#if defined(A_LIBRARY)
#undef A_LIBRARY
#define A_LIBRARY Q_DECL_EXPORT
#else
#define A_LIBRARY Q_DECL_IMPORT
#endif
#endif // LIBRARY_GLOBAL_H
在每个LibA类中,添加A_LIBRARY。例如,在&#34; neuralnetwork.h&#34;:
#ifndef NEURALNETWORK_H
#define NEURALNETWORK_H
#include "lib_a_global.h"
class A_LIBRARY NeuralNetwok {
public:
// etc
}
#endif // NEURALNETWORK_H
最后,您可以在GUI中使用库,只需包含所需的文件即可。如果你在GUI中想要实现NeuralNetwork类,那么:
#include <neuralnetwork.h>
// ...
NeuralNetwork *nn = new NeuralNetwork(this);
nn->awesomeMethod();