这是一个示例程序,我试图编译下面的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;
}
#include<stdio.h>
#include<assert.h>
#include "reciprocal.h"
double reciprocal(int i){
assert(i!=0);
return 1.0/i;
}
#include<stdio.h>
#ifdef __cplusplus
extern "C"{
#endif
extern double reciprocal(int i);
#ifdef __cplusplus
}
#endif
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:在函数
main': main.c:(.text+0x25): undefined reference to
倒数'collect2:ld 返回1退出状态make: * [reciprocal]错误1
请帮助我了解出现此错误的原因。
答案 0 :(得分:3)
更改你的makefile:
reciprocal: reciprocal.o main.o
gcc $(CFLAGS) -o reciprocal reciprocal.o main.o
^^^^^^^^^^
可替换地:
reciprocal: reciprocal.o main.o
gcc $(CFLAGS) -o $@ $^
答案 1 :(得分:3)
你有一个阴险的错字:
CFLAGS:=-o2
这应该是-O2
,其中包含大写O
,这样您就可以将每个编译的输出重定向到文件2
。