c++ - Visual Studio 2019:传递包含链引用项目之间的路径
问题描述
假设我们有一个现有的 Visual Studio 2019 解决方案,该解决方案无法使用其他工具(例如 CMake)从头开始生成。
该解决方案包含三个项目:A、B 和 C,每个项目仅包含一个文件,这是一个最小示例:
/// Project A, A.hpp
// content irrelevant
/// Project B, B.hpp
#include <A.hpp> // B's public interface includes A's header
/// Project C.cpp
#include <B.hpp> // C requires B's header, which includes A's header, to compile
习惯了 CMake 的“基于目标”的方法,我天真地认为我可以处理以下情况:
- B参考A,
- C 引用 B
然而,在这种情况下,C 只使用 B 的包含路径,但不使用 A 的包含路径。因此 C 不能编译。
只是“让它工作”的“解决方法”是显而易见的:将 A 的包含路径添加到 C 并且它将编译。但我们知道,随着项目数量的增加,这种规模会变得非常可怕:
> /// Project C2, C2.cpp
> #include <B.hpp> // requires B interface to compile
> /// Project C3, C3.cpp
> #include <B.hpp> // requires B interface to compile
> /// Project C4, C5, ... and on and on
我不必在许多项目中指定 B 接口的需求,而是在寻找 CMake 提供的功能:在 B 项目本身中定义 B 的要求(在我的情况下:包含路径),仅此而已。
我的问题是:如何完全从 Visual Studio 2019 IDE中实现这一点?
解决方案
您可以通过右键单击项目、属性、“C++ 目录”来手动配置包含路径
这可行,但性能不是很好/不是那么好。您也可以通过 MSBuild 配置它,例如使用共享的 props 文件。但我也不喜欢这种方法。
在我看来,这样做的最佳选择,不仅适用于多个部分(exe,dlls...) - 也适用于交叉编译 - 是使用具有共享元素的共享库/项目。
这使您可以将所有接口文件放在那里。我更进一步——我的项目不包含代码——它完全存储在共享项目中。通过此设置,您可以创建例如使用 MSVC 的 Windows 项目和使用相同代码库使用 GCC 编译的 Linux 版本。或者创建一个静态或动态库 - 没有什么是固定的。
要使用共享项目中的代码,您可以简单地将其添加为参考(就像您对其他项目所做的那样) - 非常简单。如果您需要进一步的帮助 - 请询问。
在这里您可以在 github 上找到一个示例:https ://github.com/bernd5/Stackoverflow-VS-Sample
寻求帮助一些图片(我的 VS 是德语 - 但我希望你能使用它):
如果您不喜欢共享库方法,您可以在此处找到不带“..”的替代方法:首先,您需要将每个项目的 include-directories 属性调整为:(
添加 MSBuild-Variable SolutionDir
)
然后你可以简单地写:
#include "A/A.h"
推荐阅读
- ios - SwiftUI 表格:与 navigationBarItems 不一致的表格行为
- javascript - 画布圆圈未正确绘制
- c++ - 如何使用 cv::cuda 和 C++ 应用 Canny Edge 检测器?
- visual-studio-code - 用户输入后源代码无效时如何自动完成?
- c++ - C++中链表的重载运算符+=
- python - 将 tabula-py 更新到最新版本
- r - 在汇总(dplyr)中使用特定值而不将其过滤掉
- ios - 如果用户输入了密码,则更改初始 ViewController
- angular - 获取在 Angular 中的组件上注册的事件列表
- java - 检查源级别 AnnotationProcessors 中 Element 的继承