有大小写文件名的C文件在Winodows上要小心了

有大小写文件名的C文件在Winodows上要小心了

分享
标签: 技术  体会  2009-12-24 19:04

    1. 在Windows上展开linux kernel source,会被这些大小写的文件名所困扰:

    linux/net/ipv4/netfilter/ipt_ECN.clinux/net/ipv4/netfilter/ipt_ecn.c,类似还有。

没办法,无论是7zip还是winrar就是不可能在ntfs上(更不可能在fat32上)展开成Linux FS(ext2/3)上相同的source tree。原因是ntfs可以读大小文件名,但简单的命令(copy等)不可能有区分的写出大小写不同的文件来。(官方的说法,http://support.microsoft.com/kb/100625/en-us/)(也有人碰到类似问题,http://hi.baidu.com/sylilzy/blog/item/153350f04015a3ca7931aacd.html, “ntfs区分大小写,但不能有同名(大小写不同)的文件存在,而ext2允许”)。

    2. Clearcase MVFS的Case-insensitivity mode和case preserving option,会影响生成的.d和.o文件的命名。以前在某个Dynamic View执行一次make,老是碰到文件cacheALib.o和vbiCCTest.o总是要被重新编译,其实对应的源文件cacheALib.s和vbiCCTest.c根本没有被touch过。奇怪!搜遍了整个目录树,以期在某个makefile或者makefile包含的文件里,发现这两个文件其实是有特殊后台和背景的(有独立的规则,要求每次make都要强制编译,就像ld时输出map文件一样的),结果没有!于是弃而不舍,继续make -d,发现竟然cacheALib.d和vbiCCTest.d没有找到,所以每次都重新开始编译,可也有vpath *.d ./obj啊,那又为什么?在./obj下有cacheALib.o和vbiCCTest.o,可就是没有cacheALib.d和vbiCCTest.d,而只有cachealib.d和vbicctest.d。原来如此!并非出身特殊,只因骨骼怪异。(改变自华安的经典名言。)于是修改Clearcase MVFS的Case-insensitivity mode和case preserving option的设置,重启机器,删除掉./obj/cacheALib.o和vbiCCTest.o,以及cachealib.d和vbicctest.d,重新make多次,不再有这个问题。另外在后来的Snapshot view中没有发现类似问题,原因是MVFS只对Dynamic View起作用。

【使用到的shell cmd和结果】#find . -name *[A-Z]*.[s\|c]。果然,就只有vbiCCTest.c,cacheALib.c和ucosDebug.c,特别的ucosDebug.c没有出现类似问题是因为,其放在在另一个库中使用不同的规则编译,没有指定输出对应的.d文件,而且的指定的o文件是,ucosdebug.o。聪明之举啊,佩服老人们的walkaround!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值