添加我正在使用的库的包含目录后。Visual Studio 2010 能够找到我#include 到我的源代码中的头文件(IntelliSense 不显示任何错误)。但是,在构建解决方案时,它告诉我它无法找到头文件。我以前的项目中使用的相同属性没有发布此问题。
我现在唯一的解决方案是使用该库中所有头文件的直接地址,但我发现这样做很烦人,因为库的头文件相互引用并且编辑没有意义他们都是。
有谁知道是什么导致了这个问题?
添加我正在使用的库的包含目录后。Visual Studio 2010 能够找到我#include 到我的源代码中的头文件(IntelliSense 不显示任何错误)。但是,在构建解决方案时,它告诉我它无法找到头文件。我以前的项目中使用的相同属性没有发布此问题。
我现在唯一的解决方案是使用该库中所有头文件的直接地址,但我发现这样做很烦人,因为库的头文件相互引用并且编辑没有意义他们都是。
有谁知道是什么导致了这个问题?
这可能是因为您在 2 个目录中有源 + 标头,它们引用彼此的头文件。即文件是
1/a.c
1/a.h
2/b.c
2/b.h
并且 ac 和 bc 的内容具有相同的包含
#include "a.h"
#include "b.h"
你的工程在编译ac的时候可以找到ah,在编译bc的时候可以找到bh(因为在使用双引号的时候,搜索路径假定同一个目录#include "xxx"
)。但是ac默认找不到bh,bc默认也找不到ah。您的项目可能在目录中1
,并且您可能已经设置了包含目录以查看2
. 在 2/bc 需要包含“ah”之前,它可以正常工作。您需要将包含目录路径设置为 include1
以及2
,即使1
是您的原始项目目录,这样做似乎很愚蠢。
这就是为什么 IntelliSense 可以打开文件(因为它是无所不知的)但编译器不能(因为它一次只查看一个文件)的原因。
与编译器和链接器相比,IntelliSense 在搜索包含文件时使用的算法略有不同。特别是,即使包含目录没有正确指定,它也可以(有时)找到头文件。
我假设您正确指定了包含目录。
\myproject\includes
一个想法:Visual Studio 2010中存在一个错误,如果您指定根路径(例如 . . 如果是这种情况,您必须指定驱动器(例如D:\myproject\includes
)或使用相对路径(例如..\..\myproject\includes
)。
似乎实际问题是由于我没有在项目中添加包含目录,该目录引用了正在实施库的项目。这解释了为什么我可以自己构建引用的项目,并且只有在我将解决方案作为一个整体编译时才会出现问题。
当我们已经在引用项目中这样做时,我发现要求我们在引用项目中重新声明包含目录是相当愚蠢的