gpt4 book ai didi

c++ - 在 qt 的子目录项目中找不到 header

转载 作者:太空宇宙 更新时间:2023-11-04 10:56:55 25 4
gpt4 key购买 nike

我有一个简单的子目录项目,在 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 添加了适当的“includepath and libs”

并且我已经使用nrclib作为gui.pro的库,我没有在gui项目中使用任何opencv函数,所以不需要将opencv的includepath和libs添加到gui.pro中,我有#include <opencv/cv.h>otherfile.h#included "otherfile.h" 中在 nrclib.h#include "nrclib.h" 中在 mainwindow.h 中。

到目前为止一切顺利。这个项目在 windows 和 Linux 下都运行良好。但是今天我做了一个改变,我在“nrclib.h”中添加了一个函数,它需要 opencv,所以我做了 #include <opencv/cv.h>nrclib.h。它在 Linux 下完美运行。但是当我想在 Windows 中编译它时,它给了我:"<opencv/cv.h>: no such file or directory" .如果我删除包含,一切正常。如果我不在 Qt 中使用“子目录模板”,就不会有任何问题。但是如果我在 Windows 中使用子目录模板,我必须添加 LIBSINCLUDEPATH OpenCV 到gui.pro,虽然在gui 工程中没有用到opencv 相关函数,我只在mainwindow.h 中包含了nrclib.h .

我的问题是:为什么要加上LIBSINCLUDEPATH gui.pro 中的 OpenCV?为什么对于已在另一个 header 中使用的包含,它会给我“没有这样的文件或目录”?

很抱歉问了一个冗长而无用的问题,它打扰了我。

编辑 1:我知道 this question但那里没有一个好的答案,应该没有必要在 gui.pro 中添加“OpenCV”,它不需要它。

最佳答案

在 C++(继承自 C)中,#include 通过递归地“复制粘贴”所包含文件的内容有效地工作。因此,如果您包含包含另一个文件的文件,那么也需要找到另一个文件。

因此,如果 nrclib.h 包含 opencv.h,编译器必须在您包含 nrclib.h 时找到 opencv.h .

它在 Linux 上工作可能是因为 opencv.h 是标准的包含路径。如果您不使用子目录模板,它也可以工作,因为您只有一个用于库和应用程序的 INCLUDEPATH。但是对于 Windows 上的子目录项目,gui.pro 无法从任何地方获取它。


作为一个实用的建议,您可以创建 nrclib/nrclib.pri,然后添加 nrclib 需要的所有内容,LIBS += ...INCLUDEPATH += ... 等等。然后在 gui.pro 中执行

include(../nrclib/nrclib.pri)

这样 gui.pro 不需要直接关心 opencv,它只需要包含来自另一个子目录项目的这个 .pri 文件。


另一种选择是更改 nrclib.h,使其不需要 opencv.h。这可能意味着,您需要从 OpenCV 包装您需要的任何内容,这样您就不需要在 nrclib.h 中使用。这是多少额外的代码,取决于您从那里到底需要什么。

关于c++ - 在 qt 的子目录项目中找不到 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28514692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com