Makefile未定义的引用

时间:2017-02-24 22:22:06

标签: c makefile

我理解为什么会发生这种错误,但我不明白我做错了什么。这是我的设置:

  • extra.c:包含一些辅助功能定义
  • extra.h:包含原型&包括for extra.c
  • foo.c:我导入utils.h的主程序

我的Makefile如下:

CC=gcc
foo_CFLAGS=-Wall

all: foo

clean: 
    rm -f foo *.o

install:
    install -m 0755 foo /bin

PRIMARY_TARGETS = foo.o other_stuff.o more_stuff.o
SECONDARY_TARGETS = extra.o

foo: $(PRIMARY_TARGETS) $(SECONDARY_TARGETS)
    $(CC) $(foo_CFLAGS) $^ -o $@

$(PRIMARY_TARGETS): %.o: %.c 
    $(CC) -c $(foo_CFLAGS) $^ -o $@

$(SECONDARY_TARGETS): %.o: %.c utils_folder/utils.c
    $(CC) -c $(foo_CFLAGS) $< -o $@

仅供参考,目标分为主要和次要,因为某些utils.c函数需要在extra.c中引用

这是我得到的错误:

undefined reference to `my_utils_function_1'

我是否以错误的方式接近次要目标?链接器需要知道有关utils.c文件的问题,以便在extra.c中定义/实现缺少的函数吗?

修改

这里是Makefile stacktrace:

| foo.o: In function `foo_init':
| /home/build/foo.c:33: undefined reference to `my_utils_function_1'
| collect2: error: ld returned 1 exit status
| Makefile:17: recipe for target 'foo' failed
| make: *** [foo] Error 1

1 个答案:

答案 0 :(得分:1)

您没有在PRIMARY或SECONDARY中引用utils.o,因此它们没有链接 -