Visual Studio "synchronize" 一个解决方案中的多个项目

Visual Studio "synchronize" multiple projects within one solution


我正在 visual studio 中编写自己的 C++ 项目库(由 *cpp、*.h 文件组成的几个项目,而不是实际的 .lib 文件)。这些项目中的每一个都位于单个 Visual Studio "solution" 中。

当我需要在另一个项目中使用一个项目的代码时,我只是复制它。但那是短期解决方案。现在我的库在大小和功能上都有了增长,而且由于代码重复,我最终得到了同一个文件的几十个不同版本。

那个单一的解决方案为我提供了新想法的游乐场 // 试验场。我正在开发项目而不是库。目前它拥有大约 50 个项目。

我正在 visual studio 2015 年工作。


假设我有这样的设置:

  1. DataIO 项目位于 */Solution/#DataInputAndOutput/DataIO/DataIO.h
    由 DataIO.h 和 DataIO.cpp
  2. 组成
  3. Foo 项目位于 */Solution/#Foo/Foo/Foo.h
    由 Foo.h 和 Foo.cpp
  4. 组成

DataIO.h:

#pragma once
#ifndef __DATA_IO_H__
#define __DATA_IO_H__
// ...

extern FILE * const logFile;

// Bunch of function declarations
#endif // !__DATA_IO_H__

我知道这不是 "Minimal, Complete, and Verifiable example" 但我的问题在于事物的逻辑,而不是事物本身。我相信我的描述已经足够了。


问题 #1:Foo.cpp#include "DataIO.h" (有可能因为我在 Foo 项目设置中添加了额外的包含目录)但是每当我尝试编译 Foo 时,我都会收到以下错误:DataIO.h 中的每个函数声明和那个外部变量的 unresolved external symbol我该如何解决这个问题?我是否需要创建一个 DataIO.lib 来保持正直?

我试图将 DataIO.hDataIO.cpp 直接添加到 Foo 项目中(不是复制它,只是将其添加到项目中)但这似乎是个坏主意......

执行此操作的最佳方法是将通用代码提取到库中,以便通用代码驻留在一个地方。然后让您的项目使用该库 - 通过包含文件并与所述库链接。

我建议在 VS2015+ 中试用新的 "Shared Items Project"。共享项项目实际上只是一组文件。该项目本身不构建任何东西。事实上,共享项项目中没有(或几乎没有)编译或链接设置——这些设置来自引用共享项项目的项目。当您从其他项目 FOO 引用共享项项目时,FOO 的构建就好像共享项项目的文件是引用项目的项一样。

除此之外,您可以设置共享项目以构建 .lib,然后使用 Visual Studio 中的项目引用自动设置链接。不过,我认为您在执行此操作时必须手动设置包含路径。