我的makefile出了什么问题?我收到“未定义的引用”错误

时间:2014-02-22 06:22:19

标签: c makefile

我对c编码很新,我检查了makefile上的标准参考,但我似乎误解了一些东西,因为我收到了错误。如果有人可以帮助我,我将不胜感激。

这是:

#makefile

all: runme dontrunme

runme: runme.o 
    clang runme.o -o runme

dontrunme: dontrunme.o library.o fun.o
    clang dontrunme.o -o dontrunme

runme.o: library.o runme.c
    clang -c runme.c -o runme.o

dontrunme.o: dontrunme.c
    clang -c dontrunme.c -o dontrunme.o

library.o: library.c library.h
    clang -c library.c -o library.o

fun.o: fun.c fun.h
    clang -c fun.c -o fun.o


clean:
    rm  -f *.o runme dontrunme

我输入make时收到的错误是:

runme.o:runme.c:function main: error: undefined reference to 'reverse'

reverse是一个函数,其原型位于library.h,并在library.c中定义

非常感谢任何有助于理解我哪里出错的帮助。

编辑:这是runme.c的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "library.h"

int main(int argc, char * argv[]){

  char s[] = "Hello World!";

  printf("%s\n", s);

  reverse(s);

  printf("%s\n", s);

}

2 个答案:

答案 0 :(得分:3)

改变这个:

runme: runme.o 
    clang runme.o -o runme

到此:

runme: runme.o library.o
    clang runme.o library.o -o runme

dontrunme

执行相同的操作
dontrunme: dontrunme.o library.o fun.o
    clang dontrunme.o library.o fun.o -o dontrunme

在这两种情况下,您都没有在最终链接中包含所有目标代码文件。

答案 1 :(得分:0)

请按以下方式更改makefile中的订单。您首先需要library.o进行构建runme.o 所以请先构建library.o然后runme.o

library.o: library.c library.h
    clang -c library.c -o library.o


runme.o: library.o runme.c
    clang -c runme.c -o runme.o