c++ - Visual Studio 2019 : Pass include paths between chain-referenced projects

标签 c++ visual-studio visual-c++ visual-studio-2019

假设我们有一个现有的 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 的“基于目标”的方法,我天真地认为我可以处理以下情况:
  • 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 接口(interface)的需求,而是在寻找 CMake 提供的功能:在 B 项目本身中定义 B 的要求(在我的情况下:包含路径),仅此而已。
    我的问题是:如何完全做到这一点来自 Visual Studio 2019 IDE ?
    [1]: /image/CAMws.png

    最佳答案

    根据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/

    相关文章:

    c++ - 如何在 Google 测试 (gtest) 中使用 fixture 成员值运行参数化测试?

    c# - 如何在 Visual Studio 2015 中将数据库中的一行显示到文本框

    c++ - 如何使用 DnsQuery 指定特定的 DNS 服务器进行查询?

    c++ - 如何使用相同的迭代器获取列表的上一个元素?

    vb.net - 使用 Visual Studio 加载项打开 Visual Studio 解决方案

    visual-c++ - Visual C++ 中#import 的替换

    c++ - 将指向 const 的指针分配给指针

    c++ - Linux 中的并发系统调用

    c++ - Rcpp_模块 : exposing class method with formal R arguments

    c++ - Visual Studio 2013 链接 : fatal error LNK1181: cannot open input file