C++ 我应该/可以/必须如何处理我的C++;项目依赖于什么?

C++ 我应该/可以/必须如何处理我的C++;项目依赖于什么?,c++,dll,nuget,C++,Dll,Nuget,我在这里迷路了,不知道该怎么走。这不是关于如何使我的程序工作的问题,而是关于如何停止浪费我的时间的问题 我的编程环境是Windows上的Visual Studio 2013,在C++中。 我广泛使用了3个库,即:boost(使用动态链接)、OpenCV和Qt 在开发过程中,我将VS配置为默认情况下查看include和.lib的这3个库。我还将包含所有DLL的3个文件夹添加到我的PATH环境变量中 这是有效的,但有时会很痛苦,让我解释一下 第一个麻烦:每当我有一个LNK错误告诉我我错过了一个函数

我在这里迷路了,不知道该怎么走。这不是关于如何使我的程序工作的问题,而是关于如何停止浪费我的时间的问题

我的编程环境是Windows上的Visual Studio 2013,在C++中。 我广泛使用了3个库,即:boost(使用动态链接)、OpenCV和Qt

在开发过程中,我将VS配置为默认情况下查看include和.lib的这3个库。我还将包含所有DLL的3个文件夹添加到我的PATH环境变量中

这是有效的,但有时会很痛苦,让我解释一下

  • 第一个麻烦:每当我有一个LNK错误告诉我我错过了一个函数,它通常在OpenCV上,因为它只有一个引用所有函数的include文件。我必须看一下OpenCV的源代码,看看这个函数属于哪个模块,知道我必须将程序链接到哪个模块

  • 第二个麻烦:当部署我的应用程序时,我必须附带所有相关的DLL。为了知道我需要哪一个,我打开dependency walker并尝试什么都不忘记,然后我必须在另一台计算机上测试它,因为102%的时间我错过了几次,然后我必须配置我的安装程序生成器以逐个包含所有这些

  • 第三个麻烦:为了简化配置新开发机器的过程,我最近切换到NuGet。这是伟大的,我添加了几个点击到任何项目的推动。但是现在我的boost DLL到处都是,我每个boost库都有一个文件夹,而且由于有几十个这样的库,我现在甚至不能将它们全部添加到我的路径中,所以我必须手动将它们移动到适当的文件夹中,这真的不是我想用我的不那么宝贵的库做的,但你是谁来判断时间呢

我环顾四周,找不到关于这个问题的任何好的实践,可能是因为它们太明显,或者对于特定的设置太具体


你好!?如果你是我,你会怎么做?

我们将所有外部依赖项与代码一起放在版本控制中。这确保了所有的代码都可以在我们的任何开发机器上“开箱即用”,也确保了对于任何给定版本的代码,我们都能准确地知道哪些依赖项是存在的

检查缺少依赖项的最佳方法是如何拥有一个好的自动化测试套件,如果您已经获得了全面的converge,那么如果您的测试通过,您必须部署所需的库

不幸的是,就链接到适当的库而言,这听起来像是OpenCV结构的问题(我不熟悉OpenCV)。我倾向于在Windows下使用dumpbin,在Linux下使用nm,当我在不熟悉的库中遇到链接错误时,可以轻松地grep符号