今天再看鸟哥的Linux私房菜时遇到的make编译错误,5个文件如下所示
main.c
#include <stdio.h> #define pi 3.1415926 char name[15]; float angle; int main(void) { printf ("\n\nPlease input your name: "); scanf ("%s", &name ); printf ("\nPlease enter the degree angle (ex> 90): " ); scanf ("%f", &angle ); haha( name ); sin_value( angle ); cos_value( angle ); }
haha.c
#include <stdio.h> int haha(char name[15]) { printf ("\n\nHi, Dear %s, nice to meet you.", name); }
sin_value.c
#include <stdio.h> #define pi 3.1415926 float angle; void sin_value(void) { float value; value = sin ( angle / 180. * pi ); printf ("\nThe Sin is: %5.2f\n",value); }
cos_value.c
#include <stdio.h> #define pi 3.1415926 float angle; void cos_value(void) { float value; value = cos ( angle / 180. * pi ); printf ("The Cos is: %5.2f\n",value); }
错误的makefile文件,把main.o文件名写为mian.o了
main: mian.o haha.o sin_value.o cos_value.o gcc -o main -lm main.o haha.o sin_value.o cos_value.o
导致出现如下报错:
[root@bogon tmp]# make
make: *** No rule to make target `mian.o', needed by `main'. Stop.
改好后正常
[root@bogon tmp]# make
cc -c -o main.o main.c
cc -c -o haha.o haha.c
cc -c -o sin_value.o sin_value.c
sin_value.c: In function ‘sin_value’:
sin_value.c:8: warning: incompatible implicit declaration of built-in function ‘sin’
cc -c -o cos_value.o cos_value.c
cos_value.c: In function ‘cos_value’:
cos_value.c:8: warning: incompatible implicit declaration of built-in function ‘cos’
gcc -o main -lm main.o haha.o sin_value.o cos_value.o
总结下,如果使用make命令时出现:make: *** No rule to make target ` ‘, needed by xxx. Stop.
的错误,那么基本上都是属于找不到所依赖的文件所导致的,所以应该去:
1.确认所依赖的文件,是否真实存在。
2.检查mkefile文件,看看文件名是否写错,很可能,很常见的一个现象就是,误写了多余的空格,导致被视为依赖文件,导致找不到,导致报此错误。
解决办法就很简单,去掉多余的空格即可。