假设我们有一个现有的 Visual Studio 2019 解决方案,该解决方案无法使用其他工具从头开始生成,例如制作。
该解决方案包含三个项目: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 的“基于目标”的方法,我天真地认为我可以处理以下情况:然而,在这种情况下,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 接口(interface)的需求,而是在寻找 CMake 提供的功能:在 B 项目本身中定义 B 的要求(在我的情况下:包含路径),仅此而已。我的问题是:如何完全做到这一点来自 Visual Studio 2019 IDE ?
最佳答案
根据https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp-projects?view=msvc-160#consuming-static-libraries他们似乎建议使用以下方法访问标题:
#include "../A/A.hpp"
它只是利用解决方案结构并继续工作。我刚刚测试了这个,它确实有效......
我把例子放在 https://github.com/kyotov/ABC
关于c++ - Visual Studio 2019 : Pass include paths between chain-referenced projects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66276758/