从属项目在 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 项目正在引用已删除的共享项目

为啥我们在 Visual Studio 2013 中引用 C++ 项目?

尝试在 Visual Studio 2012 中添加对项目的引用,“未找到项目”

Visual Studio 怎样添加引用

visual studio 无法引用第三方库?

无法在 Visual Studio 中将 Visual C++ 运行时包引用添加到 Windows Phone 项目