为项目构建大型库时的最佳实践
Best practice when building large libraries for project
我目前正在开发一个使用 OpenCV 库等的 Raspberry Pi 项目。 OpenCV 库非常大,构建过程相当广泛。我找到了 script which downloads and installs the latest version of OpenCV, and following some suggestions from this question,我能够构建库,并开始使用 OpenCV 中的函数。
考虑到 OpenCV 的实际构建过程比构建我们的项目花费的时间要长得多,只构建一次库是否可以接受,而不是每次构建项目时都构建库?
虽然我意识到这可能是个人喜好,但我想知道其他人如何处理类似情况。
编译一次然后只link库是正常的。因此,编译器可以检测源文件中是否有更改。
您可能已经知道,没有更改的代码不需要重新编译。对于可执行文件和库都是如此。
图书馆应该以简洁的 pre-packaged 形式为您提供令人上瘾的功能。添加到项目和库中的附加代码之间的区别在于,库中包含的代码应该处于稳定状态,因此一旦构建,用户将能够使用其功能而无需任何维护麻烦; APIs 将可用,它们将始终有效。您将能够丢弃任何实现文件,而只使用 header 文件(它在您的代码中为您提供 API)和包含已编译实现的库文件。
您几乎 pre-compiling 是您计划的一部分;也可以在其他项目中使用的部分,再次无需重新编译。
请注意,C++ 本身就是一个例子:C++ 标准库(例如 libc++)的实现已包含在您的编译器中,因此您可以使用标准 C++ headers无需每次尝试 "Hello World!" 程序时都重新编译整个 C++。
您甚至可以从您认为已经完成且稳定的项目部分中提取库:这可以让您减少编译项目所需的时间,即使它变得更大。这些原因是为什么在编程时如此强烈鼓励模块化的部分原因。
TL; DR: 只重新编译一次库不仅是可以接受的,而且很可能是你想要做的。
我目前正在开发一个使用 OpenCV 库等的 Raspberry Pi 项目。 OpenCV 库非常大,构建过程相当广泛。我找到了 script which downloads and installs the latest version of OpenCV, and following some suggestions from this question,我能够构建库,并开始使用 OpenCV 中的函数。
考虑到 OpenCV 的实际构建过程比构建我们的项目花费的时间要长得多,只构建一次库是否可以接受,而不是每次构建项目时都构建库?
虽然我意识到这可能是个人喜好,但我想知道其他人如何处理类似情况。
编译一次然后只link库是正常的。因此,编译器可以检测源文件中是否有更改。
您可能已经知道,没有更改的代码不需要重新编译。对于可执行文件和库都是如此。
图书馆应该以简洁的 pre-packaged 形式为您提供令人上瘾的功能。添加到项目和库中的附加代码之间的区别在于,库中包含的代码应该处于稳定状态,因此一旦构建,用户将能够使用其功能而无需任何维护麻烦; APIs 将可用,它们将始终有效。您将能够丢弃任何实现文件,而只使用 header 文件(它在您的代码中为您提供 API)和包含已编译实现的库文件。
您几乎 pre-compiling 是您计划的一部分;也可以在其他项目中使用的部分,再次无需重新编译。
请注意,C++ 本身就是一个例子:C++ 标准库(例如 libc++)的实现已包含在您的编译器中,因此您可以使用标准 C++ headers无需每次尝试 "Hello World!" 程序时都重新编译整个 C++。
您甚至可以从您认为已经完成且稳定的项目部分中提取库:这可以让您减少编译项目所需的时间,即使它变得更大。这些原因是为什么在编程时如此强烈鼓励模块化的部分原因。
TL; DR: 只重新编译一次库不仅是可以接受的,而且很可能是你想要做的。