这是一个示例程序,我试图编译下面的c程序,以了解make文件 .
main.c
#include<stdio.h>
#include "reciprocal.h"
int main(int argc,char **argv){
int i;
i=atoi(argv[1]);
printf("The Reciprocal of %d is %f\n ",i,reciprocal(i));
return 0;
}
reciprocal.c
#include<stdio.h>
#include<assert.h>
#include "reciprocal.h"
double reciprocal(int i){
assert(i!=0);
return 1.0/i;
}
reciprocal.h
#include<stdio.h>
#ifdef __cplusplus
extern "C"{
#endif
extern double reciprocal(int i);
#ifdef __cplusplus
}
#endif
makefile
CFLAGS:=-o2
reciprocal: reciprocal.o main.o
gcc $(CFLAGS) -o reciprocal.o main.o
main.o: main.c reciprocal.h
gcc $(CFLAGS) -c main.c -I ../include
reciprocal.o: reciprocal.c reciprocal.h
gcc $(CFLAGS) -c reciprocal.c -I ../include
clean:
rm -f *.o reciprocal
当编译如下时,它会抛出一个错误 .
%make
gcc -o2 -c reciprocal.c -I ../include gcc -o2 -c main.c -I ../include gcc -o2 -o reciprocal.o main.o main.o:in function main':main .c :( . text 0x25):未定义引用toreciprocal'colle2:ld返回1退出状态make:* [reciprocal]错误1
请帮我理解这个错误的原因是什么 .
2 回答
更改你的makefile:
或者:
你有一个阴险的拼写错误:
那应该是
-O2
,带有一个大写O
,这样你就可以将每个编译的输出重定向到文件2
.