我正在尝试创建如下的项目结构
test/
test.pro
build/
build.pro
main.cpp
gui/
gui.pro
mainwindow.h
mainwindow.cpp
我的 test.pro 如下所示:
TEMPLATE = subdirs
SUBDIRS = gui
CONFIG += ordered
SUBDIRS +=build
build.pro
TEMPLATE = app
QT += core gui
SOURCES += main.cpp
LIBS += -L../gui
gui.pro
TEMPLATE = lib
SOURCES += \
mainwindow.cpp
HEADERS += \
mainwindow.h
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(){}
MainWindow::~MainWindow(){}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
public:
MainWindow();
~MainWindow();
};
#endif // MAINWINDOW_H
的main.cpp
#include <QApplication>
#include "gui/mainwindow.h" //error
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//MainWindow w;
//w.show();
return a.exec();
}
我在编译期间遇到错误:
../../test/build/main.cpp:2:25: error: gui/gui.h: No such file or directory
我做错了什么?
谢谢布鲁诺。 我换了一行:
#include "gui/mainwindow.h"
到
#include "../gui/mainwindow.h"
但现在我有如下错误:
undefined reference to `MainWindow::MainWindow()'
undefined reference to `MainWindow::~MainWindow()'
我的 mainwindow.cpp 文件如下所示:
#include "mainwindow.h"
MainWindow::MainWindow()
{}
MainWindow::~MainWindow()
{}
我应该如何将 mainwindow.h 文件添加到 mainwindow.cpp ??
答案 0 :(得分:2)
当我将 build.pro 文件更改为:
时TEMPLATE = app
QT += core gui
SOURCES += main.cpp
LIBS += -L../gui/debug -lgui
申请已退出,代码为-1073741515。
也许 libs 部分的路径错了?
qt:
生成的文件树下面test/
test.pro
build/
build.pro
main.cpp
gui/
gui.pro
mainwindow.h
mainwindow.cpp
test-build-desktop/
Makefile
build/
debug/
release/
Makefile
Makefile.Debug
Makefile.Release
gui/
debug/
gui.dll
libgui.a
mainwindow.o
release/
Makefile
Makefile.Debug
Makefile.Release
我通过 Dependency Walker 检查了exe文件: LINK to image
答案 1 :(得分:0)
test/
test.pro
build/
build.pro
main.cpp
gui/
gui.pro
mainwindow.h
mainwindow.cpp
gui.h
目录中没有名为gui
的文件 - 导致错误。
修改强>
您可能希望gui/mainwindow.h
加入吗?
答案 2 :(得分:0)
错误:gui / gui.h:没有这样的文件或目录
那是因为该目录中没有这样的文件。 :)
该目录中只有3个文件
gui.pro
mainwindow.h
和
mainwindow.cpp
。
我想你想要加入"gui/mainwindow.h"
,对吧?
答案 3 :(得分:0)
我不知道我做错了什么? 当我发表评论时#include “gui / mainwindow.h”然后一切都是 行。
我认为问题出在你的include指令中。 尝试将其更改为
#include "../gui/mainwindow.h"
预处理器找到时
#include
指令它用指定的整个内容替换它 文件。指定a有两种方法 要包含的文件:
#include "file"
#include <file>
两者之间的唯一区别 表达是地方 (目录)编译器所在的位置 去寻找文件。在里面 第一种情况,文件名是 双引号之间指定的 首先在同一个文件中搜索 包含该文件的目录 包含该指令。万一 它不在那里,编译器搜索 默认目录中的文件 它被配置为寻找的地方 标准头文件。如果是文件 名称包含在之间 角括号&lt;&gt;搜索文件 直接在编译器的位置 配置为寻找标准 头文件。因此,标准 头文件通常包含在 角括号,而其他具体 头文件包含使用 引号。
http://msdn.microsoft.com/en-us/library/36k2cdd4%28VS.80%29.aspx
编辑:
现在针对未定义的引用错误。 您需要更改build.pro文件。
变化:
LIBS += -L../gui
类似
LIBS += -L../gui/debug -lgui
(路径../gui/debug对我有用,因为这是lib“gui”所在的地方)
这个想法是你必须将库所在的目录与库名分开(没有扩展名,没有任何'lib'前缀)。