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

Why do we reference C++ projects in Visual Studio 2013?

当我们打算使用引用项目中的方法时,为什么我们必须 reference 项目,对于 C++,在 Visual Studio 2013 年?我很困惑,因为我们使用 #include 预处理器指令,它将我们打算使用的代码复制并粘贴到同一个头文件中,该头文件仍然是 above/before 实际使用它的方法。

基本上,即使我在同一个 solution 文件中拥有所有 projects,并且头文件正确找到彼此(智能感知不抱怨/发生正确的 linting),我仍然遇到链接器错误。但是即使引用项目纯粹是为了解决链接器错误,如果智能感知可以 peek/show definition 我从一个单独的项目导入的代码,这是否意味着 Visual Studio 也知道我要链接到哪个项目?

这一定是有原因的,我们 #include 甚至现在都在 VS 2013 中引用包含的项目。有人可以帮助解释原因吗?

C/C++编译过程分为两步:

  • 编译 (.c/.cpp) 源代码到 lib(需要外部 .h 文件)
  • link将所有需要的lib文件编译成可执行文件(既需要自己编译的lib文件,也需要外部的lib文件,毕竟外部的.h文件只包含定义)

"There must be a reason why, we both #include and reference the included projects even now in VS 2013. Could someone help explain why?"

包括头文件允许从那里使用声明(函数、类 或结构)。但是要得到一个完全可执行的程序还有更多的必要:

  1. 编译器需要知道从哪里获取 #include 的头文件
  2. 来自不同项目的编译源代码需要link编辑到最终工件
  3. linker 需要知道从哪里获得 linked 库

如果您只有头文件库,则至少 2 点不相关,但 Visual Studio 仍需要项目参考来解析头文件路径。


对于 Visual Studio 特别是还有可用的 #import 指令,这使得 link 更容易针对共享库(并将它们保留为独立项目,而不是来自相同的解决方案)。

不,linker 在任何给定时间神奇地猜测您想要link哪些定义进入您的项目在计算上是不可行的。还好它没有尝试这样做。