我在visual studio中编写自己的C ++项目库(一些项目由* cpp,* .h文件组成,而不是实际的.lib文件)。这些项目中的每一个都位于单个Visual Studio"解决方案中。
当我需要使用另一个项目中的代码时,我只是复制了它。但这是短期解决方案。现在我的库在大小和功能方面都有所增长,而且由于代码重复,我最终得到了同一文件的几十个不同版本。
这个单一的解决方案让我成为一个操场//新思路的试验场。我正在开发项目而不是libs。目前它拥有约50个项目。
我正在开发visual studio 2015.
让我说我的设置是这样的:
*/Solution/#DataInputAndOutput/DataIO/DataIO.h
的*/Solution/#Foo/Foo/Foo.h
的#pragma once
#ifndef __DATA_IO_H__
#define __DATA_IO_H__
// ...
extern FILE * const logFile;
// Bunch of function declarations
#endif // !__DATA_IO_H__
我知道这不是一个"最小,完整,可验证的例子"但我的问题在于物流的逻辑,而不是事物本身。而且我相信我的描述已经足够了。
问题#1:在Foo.cpp
我#include "DataIO.h"
(可能是因为我在Foo
项目设置中添加了额外的包含目录)但每当我尝试编译Foo
我给出了以下错误:unresolved external symbol
,用于DataIO.h
内的每个函数声明和一个外部变量。 如何解决此问题?我是否需要创建DataIO.lib
才能保持正确?
我尝试将DataIO.h
和DataIO.cpp
直接添加到Foo
项目中(不要复制它,只需将其添加到项目中)但这似乎是一个坏主意......
答案 0 :(得分:1)
执行此操作的最佳方法是将公共代码分解到库中,以便公共代码驻留在一个位置。然后让您的项目使用库 - 通过包含文件并链接到所述库。
答案 1 :(得分:1)
我建议在VS2015 +中尝试新的“共享项目项目”。共享项目项目实际上只是一组文件。该项目本身并没有构建任何东西。实际上,共享项目项目中没有(或几乎没有)编译或链接设置 - 这些设置来自引用共享项目项目的项目。当您从其他项目FOO引用共享项目项目时,FOO的构建就像共享项目项目的文件是引用项目的项目一样。
除此之外,您可以设置共享项目以构建.libs,然后在Visual Studio中使用Project References自动设置链接。不过,我认为你必须手动设置包含路径。