从属项目在 Visual Studio 的引用中无法看到库中的标头
Posted
技术标签:
【中文标题】从属项目在 Visual Studio 的引用中无法看到库中的标头【英文标题】:Dependent project cannot see headers from a library in refferences in Visual Studio 【发布时间】:2021-04-19 10:56:42 【问题描述】:我正在学习如何制作静态库。我从 windows 和 Visual Studio 开始。
目录结构如下:
- MyLibraryProject
- include
- MyLibraryProject
- MyLibraryHeader.h
- src
- MyLibrarySource.cpp
- build
- MyLibraryProject.vcxproj
- MyDependentProject
- main.cpp
- MyDependentProject.vcxproj
MyLibraryProject.vcxproj
有以下设置:
Setting | Value |
---|---|
Configuration type | Static library (.lib) |
Additional Include Directories | $(MSBuildThisFileDirectory)../include/MyLibraryProject |
MyDependentProject.vcxproj
没有特殊设置,除了我在引用中添加了MyLibraryProject
,图像具有我使用的实际名称:
如果我在 main.cpp 中使用相对路径,我可以构建项目 - 静态链接可以正常运行:
#include "../MyLibraryProject/include/MyLibraryProject/MyLibraryHeader.h"
但是,我想包含这样的标题:
// fatal error C1083: Cannot open include file: 'MyLibraryProject/MyLibraryHeader.h': No such file or directory
#include <MyLibraryProject/MyLibraryHeader.h>
那是行不通的。我也尝试使用属性表,但也无法使用。我一直在搜索互联网,但通常发现声称如果添加引用,标头和静态库都可以工作。
这里是full repository,如果你愿意看一看。或者在 cmets 中询问是否缺少信息。
【问题讨论】:
@AndyG 已更新。尽管我找到的所有信息都表明它应该看到标题,但它看不到标题。此外,我的工作中使用了相同的方法,并且效果很好。我试图比较工作中的项目,但一无所获。 【参考方案1】:项目引用不向依赖项目提供有关标头的任何信息。最灵活的方法(在 Visual Studio 中)是属性表。我创建了一个文件MyLibraryProject/build/MyLibraryProjectDependency.props
:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>
我在 Visual Studio 的属性资源管理器中将其添加到 MyDependentProject.vcxproj
。这解决了问题,现在可以在我想要的路径上看到标题。
【讨论】:
很高兴您得到了解决方案,感谢您的分享,如果您将它们标记为答案,我将不胜感激,这将对其他社区有益。 @Jeaninez-MSFT 仅供参考,在发布后 2 天内无法接受自我回答,这就是为什么您经常会遇到仍未接受的自我回答。以上是关于从属项目在 Visual Studio 的引用中无法看到库中的标头的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们在 Visual Studio 2013 中引用 C++ 项目?