jenkins下打包编译报错如下,提示编译zynqCan.c时找不到“syscfgpll/sysCfgpll.h”文件。
但IDE下编译是没有报错也没有警告的,工程中也存在文件“syscfgpll/sysCfgPll.h”。
仔细观察发现,报错说的是找不到头文件“syscfgpll/sysCfgpll.h”,而源码中存在的是头文件“syscfgpll/sysCfgPll.h”,这里的字母p大小写不一样。
搜索发现,源码中多处调用了“syscfgpll/sysCfgPll.h”头文件,有好几处把大写“P”写成了小写“p”,还有把大写“C”写成小写"c"的。
C语言是区分大小写的,那为啥IDE下编译连个警告都没有?
C语言虽然区分大小写,但那是对C语言中的标识符才起作用,头文件包含并不属于标识符,只会在编译时被原样使用,而编译器也只是通过操作系统接口来读写文件。所以问题就出在IDE是在windows系统下运行的,windows下不区分文件名大小写;jenkins是在Linux系统下运行的,Linux系统区分文件名大小写。
在具体说下windows系统,fat文件系统是不区分大小写的,但现在windows系统基本都用的NTFS文件系统,而NTFS文件系统是区分大小写的,那为何又说windows下不区分文件名大小写呢?这是因为windows为了兼容性,其系统API CreateFile 是不区分大小写的,从而使得NTFS文件系统下也是不区分大小写了。