make: *** No rule to make target 错误原因、分析和解决办法
在用Tornado编译的时候,遇到编译器报如下错误:
make: *** No rule to make target `e:/Tornado2.2_Project/FTTB/utils/h/nos/nos_cli.h', neede
d by `onu07_snmp_cli.o'. Stop.
错误原因:makefile里面的文件依赖关系有问题,导致头文件找不到。
解决办法:打开编译相关模块的makefile文件,找到.o文件的依赖关系,找到.h文件的路径,查看是否出错并改正。
原因分析:这种情况有时候是因为工程所在的目录改变,例如原来在C盘,现在移到了D盘,而makefile里面的.h文件路径没有改变
本人编译linphone时候遇到了上述问题。经过上述的描述,已解决问题。具体解决步骤是:
比如我的报错是:
make[1]: *** No rule to make target `jni/..//submodules/linphone/oRTP/build/android/../..//src/str_utils.c', needed by `obj/local/x86/objs/ortp/src/str_utils.o'. Stop.
分析此问题,的确是由于更改了目录名称引起的。先在出问题的工程下全局搜索str_utils, 然后分别打开这些文件。查看文件里边出错的路径,然后进行相应修改就行了。我出问题的文件名称是 str_utils.o.d 。
最后发现,上述问题的产生的根本原因是工程更改路径或者更改了其中的文件夹名称之后,之前生成的.o.d文件在再次编译时并不会重新编译,因而导致该问题。根源解决办法是删除编译后生成的obj文件夹。然后重新编译就行了。
上面其中红字部分。
所谓的删除obj文件夹只需要用:
make clean
清理一下make时生成的中间文件就行了(比如.o文件),并不是要删除什么具体的文件夹。
结合centos7安装Redis时的情况,因为我们要搭建Redis Cluster时肯定要安装多个redis。
1.使用tar -zxvf redis-stable.tar.gz对它进行解压。
2.cd进入 redis-stable文件夹。
3.执行make PREFIX=/usr/local/redis1 install这句。
我们就安装好一个redis了,但是如果要再安装一个redis在/usr/local/redis2文件夹下,再执行make PREFIX=/usr/local/redis2 install就不行了,会报错。
有一个笨办法就是删除解压后的文件夹在重新解压一次,向上面1、2、3步一样重新make。
正确的做法是先使用make clean清理上次编译安装时生成的中间文件,再执行make PREFIX=/usr/local/redis2 install。
还有要注意的一点是记得安装gcc和gcc-c++,还要注意gcc的版本,用gcc -v来查看当前安装的gcc版本,版本过低(一般需要4.0以上)的话编译redis3.0以上的是会出错的。
yum install gcc
yum install gcc-c++
有可能还要安装tcl(如果make test出现You need tcl 8.5 or newer in order to run the Redis test的话)
yum install tcl