【发布时间】:2015-04-15 09:15:37
【问题描述】:
我有一个简单的子目录项目,在 Qt 中有以下文件树:
nrc.pro
gui
-gui.pro
-mainwindow.h
-mainwindow.cpp
-main.cpp
nrclib
-nrclib.pro
-nrclib.h
-nrclib.cpp
-otherfile.h
-otherfile.cpp
nrclib 使用 OpenCV,因此我在 nrclib.pro 中添加了适用于 Linux 和 Windows 的适当“包含路径和库”
并且我已经使用nrclib作为gui.pro的库,我没有在gui项目中使用任何opencv函数,所以不需要将opencv的includepath和libs添加到gui.pro中,我有#include <opencv/cv.h>在otherfile.h 和 nrclib.h 中的 #included "otherfile.h" 和 mainwindow.h 中的 #include "nrclib.h"。
到目前为止一切顺利。这个项目在 Windows 和 Linux 下都能完美运行。但是今天我做了一个改变,我在“nrclib.h”中添加了一个函数,它需要opencv,所以我对nrclib.h做了#include <opencv/cv.h>。它在 Linux 下完美运行。但是当我想在 Windows 中编译它时,它给了我:"<opencv/cv.h>: no such file or directory"。
如果我删除包含,一切正常。如果我不在 Qt 中使用“子目录模板”,就不会有任何问题。
但是如果我在windows中使用subdir模板我必须将OpenCV的LIBS和INCLUDEPATH添加到gui.pro中,虽然gui项目中没有使用opencv相关的函数,我只包含了nrclib.h 在 mainwindow.h 中。
我的问题是:为什么要在gui.pro中添加OpenCV的LIBS和INCLUDEPATH?为什么它给我“没有这样的文件或目录”对于已经在另一个标题中使用的包含?
抱歉,问了这么长又没用的问题,这让我很烦。
编辑1:我知道this question,但那里没有一个好的答案,应该不需要在gui.pro中添加“OpenCV”,它不需要它。
【问题讨论】:
-
我编辑了格式,希望我理解你的意思,请至少检查
<>与""的用法。 -
我知道
<>与""之间的区别,我的问题是“将库添加到不需要的.pro文件中。” -
如果项目中的源代码包含一个.h文件(即使间接通过其他.h文件),那么编译器需要找到.h文件...如果包含它,它是需要的。
标签: c++ linux windows qt opencv