我是C ++的新手,想知道通过源代码包含库是不错的做法。如果是,那么实现这一目标的最佳方法是什么?只需复制一个子文件夹并使用include? p>
在我的特殊情况下,我编写了一个小型库,我将在两个不同的微处理器上使用它。单独编译库,复制所有标题并使用这个“包”似乎对我来说太过分了。
答案 0 :(得分:1)
通常,库被用作库,因为它更容易和更舒适。如果您正在使用动态库(.dll或.so),事情会变得更好,因为您可以动态替换库并且事情应该继续顺利进行。
您决定使用代码存储库而不是库,这意味着您可能需要更多工作。如果你这样开心可以,但只是确保你没有破坏任何许可证,一些lgpl包(如Qt)清楚 要求他们的库动态链接。
最好的方法:很难说但是在你的位置我可能会使用git并将库包含为子模块。
答案 1 :(得分:1)
单独编译库是应该做的。
也不过分:你只是为你的库编译.o
文件,然后将它们包装在一个存档中并处理该存档。
答案 2 :(得分:1)
只是#include
源代码是一个坏主意,因为它意味着只是将代码复制到您自己的代码中,事情可能会出错。例如,如果库代码中的某处存在静态变量,并且代码中存在相同的命名静态变量,则会发生冲突。
相反,您应该单独编译库并链接它,可能与您的方式相同(即您构建库然后链接到该库)。但轻量级替代方案只是编译其他C ++文件,然后将目标文件链接到可执行文件。有关如何执行此操作的详细信息,请参阅编译器。
以这种方式包含库源是有正当理由的,例如,如果您的项目需要在开发期间修改库,那么如果库的重建是作为构建过程的一部分完成的,则更容易这样做。该项目。通过精心设计的构建过程,除非对库进行实际更改,否则不必重建库。
答案 3 :(得分:0)
库的价值部分是你比编译它更频繁地链接它,从而节省了网络费用。
如果您控制所有来源,那么无论什么构建过程最适合您都可以。
答案 4 :(得分:0)
我同意πάντα ῥεῖ但我还要补充说,这是不好的做法的原因是因为编译的库可以存储在您的计算机中的公共位置,并被大量不同的程序使用,从而减少计算机必须存储的数据量,在内存和RAM中(如果多个正在运行的程序使用相同的库)。一个例子是openGL,它是许多游戏使用的库,可能已经在你的系统中。如果您使用Windows,软件安装程序会将这些库链接到他们的程序,如果您没有它们,请添加它们。如果您使用linux,如果缺少库并提示安装它们,您将收到通知。除此之外,您可以在技术上使用未编译的库,但这会引入许多潜在的许可问题以及其他依赖项的其他问题。
答案 5 :(得分:0)
通过将源代码复制到其他项目并将其与其他源代码“混合”将使该库不再是“库”。稍后您将尝试在一个副本(对于CPU)中进行少量更改或修复错误,并忘记在另一个副本中执行相同的操作。
可能需要额外考虑,但您应该尝试将代码保存在一个位置。不要重复自己(DRY)是软件工程的一个非常强大和基础的原则,有很多好处。