Visual Studio "synchronize" 一个解决方案中的多个项目
Visual Studio "synchronize" multiple projects within one solution
我正在 visual studio 中编写自己的 C++ 项目库(由 *cpp、*.h 文件组成的几个项目,而不是实际的 .lib 文件)。这些项目中的每一个都位于单个 Visual Studio "solution" 中。
当我需要在另一个项目中使用一个项目的代码时,我只是复制它。但那是短期解决方案。现在我的库在大小和功能上都有了增长,而且由于代码重复,我最终得到了同一个文件的几十个不同版本。
那个单一的解决方案为我提供了新想法的游乐场 // 试验场。我正在开发项目而不是库。目前它拥有大约 50 个项目。
我正在 visual studio 2015 年工作。
假设我有这样的设置:
- DataIO 项目位于
*/Solution/#DataInputAndOutput/DataIO/DataIO.h
由 DataIO.h 和 DataIO.cpp 组成
- Foo 项目位于
*/Solution/#Foo/Foo/Foo.h
由 Foo.h 和 Foo.cpp 组成
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.h
和 DataIO.cpp
直接添加到 Foo
项目中(不是复制它,只是将其添加到项目中)但这似乎是个坏主意......
执行此操作的最佳方法是将通用代码提取到库中,以便通用代码驻留在一个地方。然后让您的项目使用该库 - 通过包含文件并与所述库链接。
我建议在 VS2015+ 中试用新的 "Shared Items Project"。共享项项目实际上只是一组文件。该项目本身不构建任何东西。事实上,共享项项目中没有(或几乎没有)编译或链接设置——这些设置来自引用共享项项目的项目。当您从其他项目 FOO 引用共享项项目时,FOO 的构建就好像共享项项目的文件是引用项目的项一样。
除此之外,您可以设置共享项目以构建 .lib,然后使用 Visual Studio 中的项目引用自动设置链接。不过,我认为您在执行此操作时必须手动设置包含路径。
我正在 visual studio 中编写自己的 C++ 项目库(由 *cpp、*.h 文件组成的几个项目,而不是实际的 .lib 文件)。这些项目中的每一个都位于单个 Visual Studio "solution" 中。
当我需要在另一个项目中使用一个项目的代码时,我只是复制它。但那是短期解决方案。现在我的库在大小和功能上都有了增长,而且由于代码重复,我最终得到了同一个文件的几十个不同版本。
那个单一的解决方案为我提供了新想法的游乐场 // 试验场。我正在开发项目而不是库。目前它拥有大约 50 个项目。
我正在 visual studio 2015 年工作。
假设我有这样的设置:
- DataIO 项目位于
*/Solution/#DataInputAndOutput/DataIO/DataIO.h
由 DataIO.h 和 DataIO.cpp 组成
- Foo 项目位于
*/Solution/#Foo/Foo/Foo.h
由 Foo.h 和 Foo.cpp 组成
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.h
和 DataIO.cpp
直接添加到 Foo
项目中(不是复制它,只是将其添加到项目中)但这似乎是个坏主意......
执行此操作的最佳方法是将通用代码提取到库中,以便通用代码驻留在一个地方。然后让您的项目使用该库 - 通过包含文件并与所述库链接。
我建议在 VS2015+ 中试用新的 "Shared Items Project"。共享项项目实际上只是一组文件。该项目本身不构建任何东西。事实上,共享项项目中没有(或几乎没有)编译或链接设置——这些设置来自引用共享项项目的项目。当您从其他项目 FOO 引用共享项项目时,FOO 的构建就好像共享项项目的文件是引用项目的项一样。
除此之外,您可以设置共享项目以构建 .lib,然后使用 Visual Studio 中的项目引用自动设置链接。不过,我认为您在执行此操作时必须手动设置包含路径。