Windows中使用wsl之后文件名大小写不敏感导致的问题
现象
最近使用WSL中的CentOS作为c++的编译和开发环境,有个地方一直编译失败,报如下错误:
make[2]: *** No rule to make target `src/CMakeFiles/Xyz.dir/depend'. Stop.
原因
因为项目直接放在本地d盘,所以,在CentOS里面的路径就是用的/mnt/d,其他和在Windows里面使用没有区别,从这个报错信息来看,就是说 src/CMakeFiles/Xyz.dir/depend.cmake
文件找不到,但vim去编辑是可以打开的。为什么会这样呢?
原来是在CMakeLists.txt文件中定义了同名的可执行文件和库文件,只是有大小写的区别,这个在linux下面是很常见,是正常的,因为文件系统是Windows mount到linux系统的,所以,文件名就变得不敏感了,后面的library的名字把前面的executable的文件夹覆写掉了。
add_executable(Xyz)
...
add_library(xyz)
Linux系统里面应该会同时存在Xyz.dir和xyz.dir两个文件夹的,但在Windows系统里面只有xyz.dir文件夹了,所以,导致上面Xyz.dir的文件找不到的错误。
解决方案
- 把这两个目标文件的名字改成不一样的,但这个终究是个坑。另外,如果是其他的项目,还要改关联的项目,保不齐还有问题。
- 将Windows设置成支持文件名敏感(推荐)
标签:文件名,Windows,Xyz,wsl,敏感,大小写,dir From: https://www.cnblogs.com/yangwen0228/p/17155697.html在 Windows 10 中开启文件名大小写敏感的功能,需要注意这个功能必须启用 WSL 才可使用,启用的方法是在控制面板中搜索功能,点击如下:
勾选这一项:
然后,使用管理员权限 cmd 或者 powershell 中运行:
\> fsutil file setCaseSensitiveInfo d:\test enable 已启用目录 d:\test 的区分大小写属性。
只要针对这个路径进行设置,这个路径下后续建立的所有文件和文件夹,都会是大小写敏感的了!