c-Lib文件和定义
作者:互联网
我正在使用几个外部库,而不必在主源目录或项目文件中包含所有它们的源文件和头文件.一种选择是将库编译为lib文件,然后像这样链接它们.但是我不确定在创建lib文件之前或之后对定义进行评估(是哪个?).如果在此之前,显然我不能打包它们,因为它们可能无法在不同的编译器或系统上正常工作.
因此,如果我不能将库打包为lib文件,那么有什么方法可以链接到c或cpp源文件中?可能不是,因为它们必须先编译,但也许我错了.
编辑:这是一个基于答案的后续问题.您是否认为拥有一个创建lib文件的makefile太麻烦了?我还是不想将源添加到我的项目或源目录中.
解决方法:
库是一个二进制文件,因此所有定义显然已经存在.
只是为了整理订单,定义被评估为编译过程的第一阶段-该步骤称为预处理.在此阶段,对于每个创建的cpp文件,将递归地包含其中包含所有#include的文件,并评估所有宏.
第三方无论如何都不应依赖于您的编译标志,只有一个例外-release / build lib.仅在这种情况下,您需要2个版本的3rd lib.
至于质疑在编译代码时是否一次或每次编译第三方库,则取决于它.如果您只为自己做这件事,而不是为您看似容易的事,但是如果我们谈论的是开发团队和需要长期维护的项目,那么考虑的事情就不那么多了.
因此,我们正在为团队讨论一些可靠的解决方案,并且我们希望多次编译库.
在这种情况下,我个人会努力一次编译第三部分库并多次使用.这减少了每个开发人员对每个构建的编译时间,这意味着更快的开发.
很好,但是您在哪里存放这些库.我喜欢phisycal分离-第三方库和我的代码不在同一棵树中.这样可以避免一些非故意的错误.一个好的构建系统,在大多数情况下是强制性的,应该可以重新构建.这意味着,如果您在一年后签出代码,则可以编译并接收完全相同的二进制文件.
一旦我在机器上使用了一些外部只读树.这棵树只由我管理.
为了使我的资源可重建,将第3方库的每个下一个版本都放入包含该版本的目录,并且我的源代码树已更新为指向这一点.如果您在多台计算机上构建,则所有这些计算机上的只读树都应该可见.
另一个解决方案是检查您的SCM工具(我想您使用的是一种工具)是否使您能够在一个checkhout中组合来自存储库的多个子重试.对于每个第三方库,都有一个子树.这样,在您构建的所有计算机上都可以使用第三方库.我目前在Subversion上使用这些方法-称为svn:external.在CVS AFAIK上,它称为cvs模块.该库由源代码管理系统管理的另一个优点是,您可以跟踪对第三方库所做的所有更改.
标签:linker,c-preprocessor,compiler-construction,c 来源: https://codeday.me/bug/20191023/1912839.html