【问题标题】:How do I share C++ source code files between projects in Visual Studio?如何在 Visual Studio 中的项目之间共享 C++ 源代码文件?
【发布时间】:2014-09-22 18:10:07
【问题描述】:

我正在编写一个跨平台的应用程序。一个版本可以在 Win32 下运行,第二个版本可以在 Windows Phone 下运行。

我想重用我的 C++ 核心——尤其是里面没有平台依赖,只有 STL。我命令这样做,我想在两个项目中使用相同的源文件:静态 Win32 库 (.lib) 和 Windows Phone 组件 (C++/CLI)。

如何配置这两个项目以使用完全相同的源文件和头文件?


好的,我们举个例子。假设我有项目:

MyApp.Library [win32 lib]
    myClass.cpp
    myClass.h

这个库被编译成 .DLL 文件,然后导入到 Win32 应用程序中:

MyApp.Win32App [win32 C#]

由于 Win32 在二进制级别上与 Windows Phone 不兼容,我无法直接使用该库。但由于该库仅使用 STL,因此我可以创建一个 Windows Phone 组件,将其所有源代码放在那里,然后进行构建。

MyApp.Component [Windows Phone component]
    myClass.cpp
    myClass.h

我希望这两个文件与库中使用的文件完全相同。我应该如何组织项目来达到这个效果?

【问题讨论】:

  • 想评论否决票?
  • 如何在一个解决方案中包含主要应用程序和库,并为所有这些应用程序提供匹配的构建配置?
  • 我不是反对者,但在这里真的很难看出问题所在。
  • @Spook 不是这里的反对者之一,但你的问题似乎仍然有点不清楚。
  • @Spook 至于您的编辑:(我实际上对 VS 不太熟悉)看起来您需要从相同来源创建的库的两个二进制版本。通常(正如我之前提到的),您的库项目将有 2 个不同的构建设置来匹配它应该链接的内容。我不确定 VS 解决方案是否可以通过相同的解决方案引用项目导入匹配他们的构建设置;但我猜是的。

标签: c++ visual-studio-2013 windows-phone c++-cli


【解决方案1】:

您可以将源代码从一个公共位置添加到多个项目。我经常这样做;我在一个公共目录中有代码,该目录与我的大多数项目文件在目录层次结构中处于同一级别。只需将公共目录中的 .h 和 .cpp 文件添加到您的各种项目中即可。

我确实注意到,如果您使用网络驱动器作为公共源,VisualStudio 会变得有点古怪和困难,所以我不这样做。但只要您的所有源代码都在本地磁盘上,并且 IDE 知道在哪里可以找到它们,那么在很多项目中使用相同的源文件是没有问题的。

【讨论】:

  • 所以从某种意义上说,您确实没有真正解决问题-除非您的解决方案是具有同一文件的多个实例-没有将 shared 放入自己的库中,是否真的没有办法添加它们相对???
  • @serup 不需要一个源文件的多个实例来让不同文件夹中的不同项目引用同一个源文件。我确实对我之前的答案进行了修改:VisualStudio 可以使用引用网络驱动器上的源的项目。它对网络驱动器上的项目文件不满意。我确实在同一个本地网络上的几台机器上进行开发,我的许多项目都包含来自网络驱动器上的自制类库的类。
  • 是的,我找到了一个适合我的简单解决方案 - 你可以看到我的答案
【解决方案2】:

一种方法是将所有 .hpp 和 .cpp 文件放入一个单独的文件夹 - 称之为“共享”。

然后在您的解决方案配置属性中添加一个额外的包含目录 - 此目录必须是相对路径。

然后将该共享文件夹中的相关 .cpp 文件添加到您的项目中

注意!如果您在 Shared 文件夹中的 .cpp 文件中包含“stdafx.h”,请将其注释掉。

【讨论】:

  • 我共享的许多.cpp 文件包括"stdafx.h"。每个项目文件都有自己的 stdafx 本地副本。在某些情况下,我必须将项目目录添加到要包含的目录列表的底部,但这允许我保留预编译头文件的功能。
  • @Logicrat 仅在单元测试方面存在问题 - 必须将单元测试项目设置为不使用预编译头文件
猜你喜欢
  • 1970-01-01
  • 2013-09-26
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多