问题描述: 学习Makefile的时候,当想使用变量作为路径名的时候,发现该错误。编辑完Makefile文件之后,在终端中输入make,出现如下的错误提示。(系统是ubuntu 16)
解决过程:
当时我就懵逼了,赶紧检查了一遍所有的编译器gcc cc g++,都已经正确安装,并且,在终端中输入相同的指令
cc -c ../main.c -I ../lib
完全可以正常编译。这样看来错误应该不想提示所说是 cc等编译器未安装的缘故。那么问题应该处在makefile中。
makefile内容如下(请勿吐槽文档中的内容):
Object = main.o mylib.o
PATH = ../
lib = ../lib
Main : $(Object)
cc -o Main $(Object)
main.o : ../main.c
cc -c ../main.c -I ../lib
mylib.o : $(lib)/mylib.c
cc -c $(lib)/mylib.c
cleanall = clean cleandiff
.PHONY : $(cleanall)
clean :
rm *.o
cleandiff :
rm *.diff
乍一看,我还真没发现问题,所以之后做了若干调试,首先我删除了变量,直接输入路径名,可以正常make,所以问题定位在了变量上;下一步我添加了一个变量lib,发现竟然可以正常make,那么问题就定位在了PATH这个变量上;最神奇的地方出现了,当我重命名这个变量成Path的时候,竟然就可以正常的make了!
所以最后得出的结论是,可能会由于全是大写的变量名导致make的时候报出"make: cc: Command not found"这个错误。具体发生的原因与发生的环境,由于时间问题我没有深入研究,但是还是希望给同样遇到这类问题的同伴一个解决的方向。
PS:之所以写这个博客,主要是我在百度、google、stack overflow上都没有找到正确的解决方法,也不清楚是不是只有我一个人遇到了这个问题,还是贴一下,尊敬一下我1个小时的探索。此外,在stack overflow上我也找到了问题描述一模一样的提问,有一个回答说是在Makefile文档最前面任意插入一行注释或者空白行就能解决这个问题。并且有人更帖说确实有用。本人尝试过,并没有效果,所以希望有大牛能综合我发现的这些信息,探讨一下具体原因是什么。