c++ - Visual Studio 包含 Dll 子项目 header 问题

标签 c++ visual-studio-2013 qt5

前几天我在 Visual Studio 中遇到了一个包含 DLL 的问题,我以为我已经解决了所有问题,但事实证明我没有。我的问题也很奇怪,因为一种选择有效,而另一种则无效。我所经历的行为有点奇怪,但我会尽力解释它。首先,这是我尝试包含我创建的 dll 中的 header 的一些代码(其中一个有效):

#include <QtWidgets/QApplication>
#include <QMainWindow>
/*
    This below works; it seems to be stepping backwards out of the
    project and into the folder of the dll project.
*/
#include "../ArclightFramework/GameWindow.h" // This works.
/*
    Below does not work, even though the path has been set in the
    additional directories field of the project. Oddly, though, I
    do get intellisense for the path the below.
*/
#include "ArclightEngine/ArclightFramework/GameWindow.h" // Does not work.
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    GameWindow f;
    f.show();
    return a.exec();
}

第一个包含工作非常好,我可以接受基于它的所有 future 包含。但是,有谁知道为什么第二个包含不起作用?这就是我所说的“不起作用”的意思。

1>------ Build started: Project: ArclightEngine, Configuration: Debug Win32 ------
1>  main.cpp
1>main.cpp(13): fatal error C1083: Cannot open include file: 'ArclightEngine/ArclightFramework/GameWindow.h': No such file or directory
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========

这里甚至还有一张相同的鼠标悬停错误的图片: enter image description here

你看,奇怪的是,我确实包含了“其他导入目录”的路径;这是一张图片:enter image description here

这是该目录,以及显示所有内容都应该正确找到的完整路径。 enter image description here

我的问题很简单。为什么 Visual Studio 找不到包含文件?

更新:这是另一张图片,显示 Intellisense 如何提供包含路径的完成,但同样,此后它不起作用! enter image description here

另一个更新: 好吧,所以我尝试了一些新的东西。这次,我没有将绝对路径添加到“附加包含”字段,而是添加了:“$(ProjectDir)../../”,Intellisense 再次为此路径及其中的 header 提供补全。但之后它无法识别文件本身,但它们确实存在并且路径是完美的。我的路径,使用上面的宏,会将我的包含路径转换为:“ArclightEngine/ArclightFramework/BLAH.h”

这是一张新图片,显示了我包含的路径: enter image description here

我不明白我所做的和正在运行的路径之间有什么区别 "#include "../ArclightFramework/GameWindow.h""

另外,显然这个包含路径现在也可以工作:

"#include "/Users/Krynn/Desktop/ArclightEngine/ArclightEngine/ArclightFramework/GameWindow.h""

TL;DR 我想要的只是能够输入“#include“ArclightEngine/ArclightFramework/blah.h”

最佳答案

您说过用户包括:

C:\Users\Krynn\Desktop\ArclightEngine

并且您尝试包括:

"ArclightEngine/ArclightFramework/GameWindow.h"

因此,当您使用引号而不是尖括号时,VS 将尝试的第一条路径是:

C:\Users\Krynn\Desktop\ArclightEngine\ArclightEngine\ArclightFramework\GameWindow.h

这只是两条路径加在一起,所以这永远不会起作用。

因此包括:

"../ArclightEngine/ArclightFramework/GameWindow.h"

变成:

C:\Users\Krynn\Desktop\ArclightEngine\..\ArclightEngine\ArclightFramework\GameWindow.h

变成:

C:\Users\Krynn\Desktop\ArclightEngine\ArclightFramework\GameWindow.h

因此这是有效的。所以另一个选择应该是包括:

ArclightFramework\GameWindow.h

更新:

看起来您真正的问题是您更新了“Release Win32”的配置,但您在构建具有不同设置的“Debug Win32”。更新适用于所有配置和平台的设置(例如包含路径)时,请务必从组合框中选择“所有配置”和“所有平台”。

关于c++ - Visual Studio 包含 Dll 子项目 header 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27211829/

相关文章:

c++ - Clang AST 匹配器 : How to match on lambda captured variables?

c++ - C++ 中 C 库的范围 - <X.h> 与 <cX>

c++ - std::error_category 可以跨 dll 使用吗?

android - Android 上 Qt 5.3 RC 中的 QtPositioning 错误

python - 使用 PyOpenGL 绘图时出现问题

qt - 如何在 QTableView 中为当前项设置样式表

c++ - C++链表存储字符串

c++ - 可变模板构造函数和复制构造函数

使用 sql server 数据库部署 C# 应用程序?

tfs - 错误: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Default.props" was not found