make: *** No rule to make target 错误原因、分析和解决办法

时间:2022-11-23 14:48:13

在用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文件夹。然后重新编译就行了。