2014-02-05 3 views
0

У меня есть набор вспомогательных функций, определенных в testhelper.c. Чтобы облегчить их использование, я пытаюсь связать их с файлом заголовка testhelper.h и включить этот файл в тестовые программы, которые я есть разработки. Однако файлы не связаны правильно, потому что я получаю «неопределенную ссылку» в программах тестирования при компиляции.C linking, undefined reference to <function>

Код в Makefile является:

randomtestadventurer: randomtestadventurer.c dominion.o rngs.o testhelpers.o 
    gcc -o randomtestadventurer -g randomtestadventurer.c dominion.o rngs.o $(CFLAGS) 

randomtestcard: randomtestcard.c dominion.o rngs.o testhelpers.o 
    gcc -o randomtestcard -g randomtestcard.c dominion.o rngs.o $(CFLAGS) 

testhelpers.o: testhelpers.h testhelpers.c 
    gcc -c testhelpers.c -g $(CFLAGS) 

включаемой путь в обоих randomtest программ: #include «testhelpers.h»

Это моя первая попытка в заголовочном файле Я сделал с нуля, поэтому я не уверен, что я сделал неправильно.

+0

Вы должны установить ссылку на testhelpers.o. Добавьте его в командную строку gcc. – PMF

+0

См. [Этот пример Makefile] (http://stackoverflow.com/a/14180540/841108) ... Узнайте, как использовать переменные в 'Makefile'. Запустите 'make -p', чтобы узнать о встроенных правилах. –

+0

@Basile Starynkevitch Я обычно очищаю свои make-файлы дальше в разработке. Поскольку правила makefile часто меняются на данном этапе разработки. Я знаю, что у меня есть тонна избыточности, которая должна уйти (как и случайные тесты, использующие один и тот же набор файлов .o) –

ответ

0

Makefile, что вы написали кажется глючит:

randomtestadventurer: randomtestadventurer.o dominion.o rngs.o testhelpers.o 
    gcc -o randomtestadventurer -g randomtestadventurer.o dominion.o rngs.o testhealpers.o $(CFLAGS) 

randomtestcard: randomtestcard.o dominion.o rngs.o testhelpers.o 
    gcc -o randomtestcard -g randomtestcard.o dominion.o rngs.o testhelpers.o $(CFLAGS) 

randomtestadventurer.o : randomtestadventurer.c 
    gcc -o randomtestadventurer.o -c -Wall randomtestadventurer.c header.h 

randomtestcard.o : randomtestcard.c 
    gcc -o randomtestcard.o -c -Wall randomtestcard.c header.h 

testhelpers.o: testhelpers.h testhelpers.c 
    gcc -c testhelpers.c -g $(CFLAGS) 

также вы должны дать правила для создания dominion.o и rngs.o. Вместо заголовков header.h вы фактически включили в свой файл