11.6文件系统惯例

Autoconf广泛使用shell-script处理,因此文件名它处理的不应包含特殊于外壳。特殊字符包括空格、制表符、换行符、NUL和以下内容:

" # $ & ' ( ) * ; < = > ? [ \ ` |

此外,文件名不应以“~'或'-',并且应该两者都不包含'-'紧接其后'/“无”~紧随其后':’. 在类Posix平台上,目录名不应包含“:',因为这与'冲突':'用作路径分隔符。

这些限制不仅适用于您分发的文件,而且也可以是源、生成和目标的绝对文件名目录。

在一些类似Posix的平台上,”!'和'^“也很特别,所以应该避免出现这种情况。

Posix允许实现处理领先//特别是,但是需要领导///甚至更高,相当于/.大多数Unix变体处理//喜欢/然而,一些治疗//作为“超级光盘”,可以访问无法从其他地方访问/.超光速传统开始Apollo Domain/OS早已消亡,但不幸的是Cygwin让它复活了。

While期间自动配置文件和朋友通常在Posix上运行多种多样,它们可以在其他系统上使用,尤其是DOS变体。这影响了有关文件名的几个假设。

例如,以下代码:

案例$foo_dir in/*)#绝对值;;*)foo_dir=$dots$foo_dir;;欧洲安全理事会

无法正确检测这些系统上的绝对文件名,因为他们可以使用drivespec,通常使用反斜杠作为目录分离器。如果您想移植到DOS变体(在拒绝有效但奇怪的Posix文件名的代价a: \b个),您可以这样检查绝对文件名:

案例$foo_dir in[\\/]* | ?:[\\/]*)#绝对;;*)foo_dir=$dots$foo_dir;;欧洲安全理事会

确保在适当的情况下引用括号,并保持反斜杠为第一个字符。请参见壳牌内置产品的局限性.

此外,因为冒号是作为drivespec的一部分使用的,所以这些系统不会将其用作路径分隔符。创建或访问路径时,可以使用路径_分离器而不是输出变量。配置设置此到构建系统的适当值(':'或';')当它启动。

文件名也需要特别注意。而DOS变体有足够的力量跑自动配置文件(如DJGPP)通常能够正确处理长文件名可能严重破坏程序包的限制。其中几个问题可以很容易地被多施克包裹。

以下是简要概述;问题用SFN/LFN标记为指出其适用范围:SFN表示问题仅与普通DOS,而不是Microsoft Windows下的DOS变量,而LFN识别即使在Microsoft Windows变体。

无多点(SFN)

DOS无法处理文件名中的多个点。这是一个特别的构建可移植配置脚本时要记住的重要事项,作为自动配置文件模板文件使用.in后缀。

这在Posix变体上完全可以:

AC_CONFIG_HEADERS([配置h])AC_CONFIG_FILES([source.c foo.bar])交流输出

但它会在DOS上造成问题,因为它需要'配置h.in’,源.c.in'和'foo.bar.in软件’. 使您的包更便于携带对于基于DOS的环境,您应该使用此选项:

AC_CONFIG_HEADERS([CONFIG.h:CONFIG.hin])AC_CONFIG_FILES([source.c:source.cin foo.bar:foobar.in])交流输出
无前导点(SFN)

DOS无法处理以点开头的文件名。这通常是对不重要自动配置文件.

不区分大小写(LFN)

DOS不区分大小写,因此不能同时使用文件名为“安装'和名为'的目录安装’. 这个也会影响制作; 如果有一个名为“”的文件安装中的'目录,'进行安装'什么都不做(除非安装'目标标记为PHONY)。

8+3极限(SFN)

因为DOS文件系统只存储文件名和扩展名的前3个必须是唯一的。这意味着foobar部分1.c,foobar第2.c部分foobar漂亮的小鸟。c(c)全部解析为相同的文件名(FOOBAR-P.C公司). 这也适用于foo.bar按钮食物.小吃.

8+3限制在Microsoft Windows下通常不是问题,因为使用数字在文件名的简短版本中添加尾部以使其唯一。然而,a注册表设置可以关闭此行为可以在SFN之间共享包含长文件名的文件树和LFN环境,这也意味着上述问题适用于此也。

无效字符(LFN)

DOS文件名中的某些字符无效,因此应该避免。在LFN环境中,这些是“/’, ‘\’,’, ‘*’, ‘:’, ‘<’, ‘>’, ‘|'和'"’.在SFN环境中,其他字符也无效。这些包括'+’, ‘,’, ‘['和']’.

无效名称(LFN)

某些DOS文件名是保留的,如果您尝试使用具有这些名称的文件。这些名称包括反对的论点,辅助的,通信1,通信2,通信3,通信4,低压变压器1,LPT2型,LPT3型,NUL(无)、和项目需求编号.文件名不区分大小写,因此即使是像这样的名称辅助/配置猜测不允许。