Makefile не находит функции в c - PullRequest
1 голос
/ 05 октября 2019

Я написал следующий make-файл:

CC = gcc
OBJS = Car.o Guide.o GuideSystem.o
DEBUG_OBJS = Car_debug.o Guide_debug.o GuideSystem_debug.o
SOURCE = Car.c Guide.c GuideSystem.c
HEADER = Car.h Guide.h GuideSystem.h list.h set.h
CFLAGS = -std=c99 -Wall -pedantic-errors -Werror
LIBM = -L. -lib
EXEC = test.exe test1.exe test2.exe test2_debug.exe
TEST_O = test1.o test2.o test2_debug.o test.o

#make test1.exe
test1.exe : $(OBJS) test1.o
    $(CC) $(CFLAGS) -DNDEBUG $(OBJS) test1.o $(LIBM) -o $@

#make test2.exe
test2.exe : $(OBJS) test2.o
    $(CC) $(CFLAGS) -DNDEBUG $(OBJS) test2.o $(LIBM) -o $@

#make test2_debug.exe
test2_debug.exe : $(OBJS) test2_debug.o
    $(CC) $(CFLAGS) -g $(OBJS) test2_debug.o $(LIBM) -o $@

#make test.exe
test.exe : $(OBJS) test.o
    $(CC) $(CFLAGS) -DNDEBUG $(OBJS) test.o $(LIBM) -o $@

#Testing (no asserts)
test.o : test.c Guide.h GuideSystem.h
    $(CC) -c -DNDEBUG $*.c $(CFLAGS)
test1.o : test1.c Guide.h GuideSystem.h
    $(CC) -c -DNDEBUG $*.c $(CFLAGS)
test2.o : test2.c Guide.h GuideSystem.h
    $(CC) -c -DNDEBUG $*.c $(CFLAGS)
Guide.o : Guide.c Guide.h list.h Car.h
    $(CC) -c -DNDEBUG $*.c $(CFLAGS)
GuideSystem.o : GuideSystem.c GuideSystem.h set.h
    $(CC) -c -DNDEBUG $*.c $(CFLAGS)
Car.o : Car.h
    $(CC) -c -DNDEBUG $*.c $(CFLAGS)

#Debug testing
test2_debug.o : test2.c Guide.h GuideSystem.h
    $(CC) -c -g $(CFLAGS) test2.c -o $@
Guide_debug.o : Guide.c Guide.h list.h Car.h
    $(CC) -c -g $(CFLAGS) Guide.c -o $@
GuideSystem_debug.o : GuideSystem.c GuideSystem.h set.h
    $(CC) -c -g $(CFLAGS) GuideSystem.c -o $@
Car_debug.o : Car.h
    $(CC) -c -g $(CFLAGS) Car.c -o $@

#Clean builds
clean :
    rm -f $(OBJS) $(DEBUG_OBJS) $(EXEC) $(TEST_O)

Когда я запускаю make test, я получаю:

gcc   test.o   -o test
test.o: In function `main':
test.c:(.text+0x29): undefined reference to `createGuide'
... more undefined functions

У меня есть проблемы с make-файлом, но я не могунайти проблему. Все остальные опции make работают правильно, только make test дает сбой.

Насколько я понимаю, он должен работать:

gcc -c -DNDEBUG -std=c99 -Wall -Werror -pedantic-errors test.c
gcc -o test.exe -DNDEBUG Guide.o GuideSystem.o Car.o test.o -L. -lib

В чем может быть проблема? Как я могу решить это? У меня проблема с моим make-файлом?

1 Ответ

1 голос
/ 05 октября 2019

Вы не определили цель test, поэтому make ошибочно догадался, что вы хотите создать программу с именем test только из test.o (неявное правило).

Что вам следует сделатьвозможно вставить в Makefile это:

test: test.exe test2.exe
    ./test.exe
    ./test2.exe
.PHONY: test

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...