18.2 主机文件系统
GCC需要知道许多关于主机文件系统的语义方面的东西。具有Unix和MS-DOS语义的文件系统会被自动检测。对于其它系统,你可以在xm-machine.h中定义下列宏。
HAVE_DOS_BASED_FILE_SYSTEM
-
如果主机文件系统服从MS-DOS而不是Unix定义的语义,则该宏会被system.h自动定义。DOS文件系统大小写不敏感,文件描述可以起始于一个驱动字母,并且斜线和反斜线(‘/’和‘\’)都是目录分隔符。
DIR_SEPARATOR
DIR_SEPARATOR_2
-
如果定义,这些宏扩展为字符常量,用来指定在文件描述中的目录名的分隔符。在Unix和MS-DOS文件系统上,system.h会自动给出合适的值。如果你的文件系统不是这些,则在xm-machine.h中定义一个或者这两个合适的值。
但是,像VMS这样的操作系统,构建路径名要比将目录名通过特定字符进行字符串连接复杂的多,对于这种情况,则不要定义这些宏。
PATH_SEPARATOR
-
如果定义,该宏将扩展为一个字符常量,用来指定搜寻路径中元素的分隔符。缺省值为一个冒号(‘:’)。基于DOS的系统,通常,并不是所有的,使用分号(‘;’)。
VMS
-
如果主机系统为VMS,则定义该宏。
HOST_OBJECT_SUFFIX
-
定义该宏为一个C字符串,用来表示在你的主机上目标文件的后缀。如果没有定义该宏,GCC将会使用‘.o’作为目标文件的后缀。
HOST_EXECUTABLE_SUFFIX
-
定义该宏为一个C字符串,用来表示在你的主机上可执行文件的后缀。如果没有定义该宏,GCC将会使用空字符串作为可执行文件的后缀。
HOST_BIT_BUCKET
-
一个路径名,由主机操作系统定义,可以作为一个文件被打开和写入内容,但是所有写入的信息都将被丢弃。这就是众所皆知的bit bucket,或者null device。如果没有定义该宏,GCC将使用‘/dev/null’作为bit bucket。如果主机不支持bit bucket,则将该宏定义为一个无效的文件名。
UPDATE_PATH_HOST_CANONICALIZE (
path)
-
如果定义,则为一个C语句(没有分号),当编译驱动器或者预处理器中使用的路径需要被canonicalized时,用于执行主机相关的 canonicalization。path是被malloc出来的。如果C语句将path canonicalize到一个不同的缓存中,则
旧的路径将被释放,并且新的缓存应该通过malloc被分配。
DUMPFILE_FORMAT
-
定义该宏为一个字符串,用来表示构建调试转储文件名字的索引部分的格式。结果字符串必须适合15个字节。文件名的全称为:汇编文件名的前缀,应用该模式生成的索引号,以及每种转储文件所特定的字符串,例如‘rtl’。
如果没有定义该宏,GCC将会使用‘.%02d.’。应该在使用缺省方式会生成无效文件名的情况下,定义该宏。
DELETE_IF_ORDINARY
-
定义该宏为一个C语句(没有分号),用来执行主机相关的编译驱动器产生的普通临时文件的删除操作。
如果没有定义该宏,GCC将会使用缺省的版本。应该在缺省版本不能可靠的删除临时文件的情况下,定义该宏。例如,在VMS上,会允许一个文件有多个版本。
HOST_LACKS_INODE_NUMBERS
-
如果主机文件系统不在struct stat中报告有意义的inode数字时,则定义该宏。