以美元符号作为第一个和最后一个字符的 RCSID 在像 touch.c 这样的 FreeBSD 代码中意味着什么?
What does the RCSID with dollar signs as the first and last characters mean in FreeBSD code like touch.c?
见https://opensource.apple.com/source/file_cmds/file_cmds-82/touch/touch.c第36行:
__RCSID("$FreeBSD: src/usr.bin/touch/touch.c,v 1.20 2002/09/04 23:29:07 dwmalone Exp $");
这行是什么意思? __RCSID
是什么,字符串的含义是什么?这是版本控制的一些标准消息吗?
在cdefs.h
我找到了
#ifndef __RCSID
#define __RCSID(s) __IDSTRING(rcsid,s)
#endif
和
#define __IDSTRING(name, string) static const char name[] __used = string
但我还是不知道它们是干什么用的。
这来自版本控制系统,最早的版本控制系统之一,后来被其他一些版本控制系统采用。如果文件包含 $keyword:...$
形式的字符串,则 ..
部分会在检入和检出文件时自动替换为有关文件版本的信息。
这通常被放入一个静态变量中,这样您就可以在生成的目标文件中搜索该字符串,以找出使用哪个版本的源代码来生成它。请参阅 ident 命令以了解其使用方式。
我检查了一些 Linux 系统,它们没有 ident
,但您可以简单地使用 strings
:
strings /usr/bin/touch | grep FreeBSD:
见https://opensource.apple.com/source/file_cmds/file_cmds-82/touch/touch.c第36行:
__RCSID("$FreeBSD: src/usr.bin/touch/touch.c,v 1.20 2002/09/04 23:29:07 dwmalone Exp $");
这行是什么意思? __RCSID
是什么,字符串的含义是什么?这是版本控制的一些标准消息吗?
在cdefs.h
我找到了
#ifndef __RCSID
#define __RCSID(s) __IDSTRING(rcsid,s)
#endif
和
#define __IDSTRING(name, string) static const char name[] __used = string
但我还是不知道它们是干什么用的。
这来自版本控制系统,最早的版本控制系统之一,后来被其他一些版本控制系统采用。如果文件包含 $keyword:...$
形式的字符串,则 ..
部分会在检入和检出文件时自动替换为有关文件版本的信息。
这通常被放入一个静态变量中,这样您就可以在生成的目标文件中搜索该字符串,以找出使用哪个版本的源代码来生成它。请参阅 ident 命令以了解其使用方式。
我检查了一些 Linux 系统,它们没有 ident
,但您可以简单地使用 strings
:
strings /usr/bin/touch | grep FreeBSD: