C makefile错误

时间:2013-02-01 08:33:11

标签: c makefile

我有一个自定义头文件example.h,它有一些函数的原型。我实现了一个.C文件example.c,其中包含“includes”(#include“example.h”),并具有在example.h中具有原型的函数的实现。现在,我有另一个函数test.c,它调用example.h中的原型函数并在example.c中定义。

我的make文件如下

test: test.o
    gcc -o test -g test.o

test.o: test.c example.c example.h  
    gcc -g -c -Wall test.c
    gcc -g -c -Wall example.c

clean:
    rm -f *.o test

我得到关于example.c中定义的函数的以下消息

未定义首次引用  文件中的符号

function1 test.o

function2 test.o

function3 test.o

function4 test.o

ld:致命:符号引用错误。没有输出写入测试

collect2:ld返回1退出状态

* 错误代码1

make:致命错误:目标`test'命令失败

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

%.o: %.c
    gcc -c -g -o $@ $^

test: test.o example.o
    gcc -o -g $@ $^

%.o: %.c这意味着任何*.o文件都应根据其提交的等效格式c构建。

示例test.o应该来自test.c,而example.o应该来自example.c

答案 1 :(得分:1)

首先,您必须在生成可执行文件时包含example.o文件:gcc -o test example.o test.o。然后,您为目标test.o编写的依赖项不正确。你应该像这样分开它:

test: test.o example.o
    gcc -o test test.o example.o
test.o: test.c
    gcc -c -Wall test.c
example.o: example.c
    gcc -c -Wall example.c

然后,考虑使用变量来存储目标文件的名称,要传递给链接器/编译器的标志等......这将使您的生活更轻松。

答案 2 :(得分:0)

test.o: test.c example.c example.h
gcc -g -c -Wall test.c gcc -g -c -Wall example.c

根据您的代码test.o目标是调用test.c example.c example.h目标,我无法看到。