自动将“附加包含目录”添加到静态库的用户

Posted

技术标签:

【中文标题】自动将“附加包含目录”添加到静态库的用户【英文标题】:automatic add "Additional include directory" to user of a static library 【发布时间】:2017-03-29 08:30:04 【问题描述】:

我有一个应用程序项目 (MyGame) 在同一解决方案中使用/调用我的静态库 (MyLib):-

MySol\
- MyLib (static library)   use "external"
- MyGame (win32 app)       use "MyLib"  

从上图中,MyLib 需要一个非我编写的外部库。 外部标头位于D:\external\

工作配置(传统)

这是使一切正常的正确设置:-

    MyLib其他包含目录 = D:\external\;

    MyGame其他包含目录 = D:\MySol\MyLib\;D:\external\;

请注意,我必须将 Additional Include Directories = D:\external\; 添加到两个项目中。

当我有很多项目时,这在现实生活中是一团糟。 (繁琐、难以维护、容易出错和肮脏)

Property sheet可以稍微缓解问题,但不能完全治愈。

梦想配置

我希望我能尽快包含:-

    MyGame其他包含目录 = D:\MySol\MyLib\;

无法编译,因为项目MyGame 无法访问\external 中的标头。 (废话,为什么不自动化?)

MyLib 添加到MyGameReference(解决方案资源管理器)没有帮助。

问题

如何让静态库项目 (MyGame) 的用户自动吸收 其他包含目录 (\external)静态库项目 (MyLib)?

相关问题

It is possible to do such thing about linker,但我找不到关于其他包含目录的任何设置。 This 是一个相关问题,但它主要问“为什么”,所有解决方案都建议我必须手动完成。 (真的吗?)

【问题讨论】:

制作一个属性表,将 d:\external 添加到 AdditionalIncludeDirectories。在搜索路径中需要该目录的所有项目中导入该属性表? @stijn 您好,如果您愿意,可以将其作为简短答案发布。有用。谢谢。因为有你,我的工作流程更加顺畅。 XD 【参考方案1】:

正如您现在发现的那样,属性表通常是使此类事情部分自动化的简单方法(另一种方法是像 VcPkg 这样的包管理,但据我所知,这还没有(尚未)正确建立,而不像创建单个文件并单击几下将其添加到项目中那么容易)。 在这种情况下:创建一个属性表,将 d:\external 添加到AdditionalIncludeDirectories 并将该表导入所有需要它的项目中。此外,如果您不使用编译指示进行自动链接和/或库不在所有项目都知道的公共位置,您可以将库搜索路径和库本身添加到属性表中的链接器输入以获取编译器和链接器很高兴。

【讨论】:

以上是关于自动将“附加包含目录”添加到静态库的用户的主要内容,如果未能解决你的问题,请参考以下文章

如何将qt静态库代码还原动态库

VS.net中如何使用静态库

VS2010添加外来库设置

.a静态库的制作及使用

VS2017缺少文件

静态库的临时构建(Testflight)