我确实阅读了man手册,但没有帮助。 rcs
似乎是传递给ar的最流行选项,但是它的含义对我来说并不那么清晰。
因此,c
表示创建一个新存档文件,但是为什么要使用r
呢?它似乎代表“替换”?s
选项会对输出产生什么影响?
我确实阅读了man手册,但没有帮助。 rcs
似乎是传递给ar的最流行选项,但是它的含义对我来说并不那么清晰。
因此,c
表示创建一个新存档文件,但是为什么要使用r
呢?它似乎代表“替换”?s
选项会对输出产生什么影响?
阅读手册页(ar命令)是一个不错的开端:
c
创建档案。如果请求更新,则始终创建指定的档案,但除非事先指定要创建它,否则会发出警告,使用此选项可避免。
r
将文件成员插入到档案中(并进行替换)。此操作与q操作不同之处在于,如果已存在的成员名称与正在添加的名称匹配,则删除它们。
s
向档案中写入一个对象文件索引,或更新现有的对象文件索引,即使对档案没有做出其他更改也是如此。您可以使用此修饰符标志与任何操作组合使用,也可以单独使用。在档案上运行“
ar s
”等效于在其上运行ranlib。
与POSIX比较,您可能会注意到一个区别:GNU ar使选项前缀“-”变为可选。
档案可以包含除目标文件以外的其他项(尽管这不常见)。包含目标文件的档案需要进行额外的维护(例如由ranlib
执行),以使它们可供链接器使用。
-s
选项起源于 BSD(System V 自动执行)。但是,仅运行 ranlib
是普遍做法(很少使用 -s
)。有趣的是,POSIX 没有 ranlib
,最终 -s
选项将替换在许多不同平台上编写的 makefile 中的 ranlib
。阅读ar
手册有所帮助,但我会详细解释一下。
当使用Makefile
编译库时,最可能使用的命令是ar -rcs
。
r
的意思是,如果库已经存在,则用新文件替换库中的旧文件。
c
的意思是,如果库不存在,则创建库。
s
可以被视为“排序”(创建一个排序索引),使得可以更快地访问库中的函数。
因此,rcs
可以被视为replace、create、sort
的缩写。