C中的Makefile(带后缀)

时间:2016-09-13 22:34:44

标签: c makefile

所以我有三个文件:

log.c : defines all the functions
log.h : lists all the functions
main.c. : uses the functions

现在,log.cmain.c都有log.h标题。

gcc log.c main.c 

以上运行正常,没有错误。但是,当我尝试在this教程后创建一个Makefile时,我有:

 CC=gcc
 CFLAGS=-I

 log: main.o log.o
     $(CC) -o log main.o log.o -I

当我运行make时,每次main调用log.c中定义的函数时都会显示错误,说“未定义对(函数)的引用”。

对此有任何帮助将不胜感激。

-bash-4.2$ make
gcc -I   -c -o main.o main.c
/tmp/ccQOC7wH.o: In function `main':
main.c:(.text+0x11): undefined reference to `getlog'
main.c:(.text+0x6f): undefined reference to `buildmsg'
main.c:(.text+0x7b): undefined reference to `savelog'
main.c:(.text+0x109): undefined reference to `buildmsg'
main.c:(.text+0x19a): undefined reference to `buildmsg'
main.c:(.text+0x207): undefined reference to `getlog'
main.c:(.text+0x223): undefined reference to `savelog'
main.c:(.text+0x247): undefined reference to `buildmsg'
main.c:(.text+0x24c): undefined reference to `getlog'
main.c:(.text+0x268): undefined reference to `savelog'
main.c:(.text+0x279): undefined reference to `clearlog'
collect2: error: ld returned 1 exit status

2 个答案:

答案 0 :(得分:3)

您没有为I选项指定include目录,因此在编译阶段GCC实际上将-c解释为include目录,该目录取消了仅编译标志,然后尝试链接你的程序。

你不需要include标志,甚至不需要链接的配方因为你的文件布局与内置规则匹配,你的整个Makefile(假设cc是你默认编译器的链接)可以只是

log: log.o main.o

答案 1 :(得分:0)

当您运行包含-I而不是-I.的makefile时,您创建了无效的main.o。您需要将-I.重新放回该目录中的CFLAGSrm *.o。那就应该好了。