Включить библиотеку glib в Makefile - PullRequest
0 голосов
/ 02 июня 2018

Я не эксперт по Makefile.В моей программе я использую хеш-таблицы glib.h , поэтому в своем Makefile я написал это:

exec: bin/test
    bin/test

clean:
    rm -f build/* bin/*

CFLAGS = -g -Wall -Wpedantic -Wno-padded -O $(shell pkg-config --cflags --libs glib-2.0)

INCLUDES = include/*.h

COMMON_DEPS = $(INCLUDES) Makefile

build/%.o: src/%.c $(COMMON_DEPS)
    $(CC) $(CFLAGS) -c $< -o $@

bin/test: /* functions.o*/ $(COMMON_DEPS)
$(CC) -o bin/test /* functions.o*/

Но когда я запускаю Makefile, я получаю список этих сообщений об ошибках:

...
functions.c: undefined reference to "g_str_hash"
functions.c: undefined reference to "g_str_equal"
...

Я не понимаю, почему

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

В конце я решил это так:

exec: bin/test
    bin/test

clean:
    rm -f build/* bin/*

CFLAGS = -g -Wall -Wpedantic -Wno-padded -O $(shell pkg-config --cflags glib-2.0)

LFLAGS = $(shell pkg-config --libs glib-2.0)

INCLUDES = include/*.h

COMMON_DEPS = $(INCLUDES) Makefile

build/%.o: src/%.c $(COMMON_DEPS)
    $(CC) $(CFLAGS) -c $< -o $@

bin/test: /*functions.o */ $(COMMON_DEPS)
    $(CC) -o bin/test /*functions.o */ $(LFLAGS)
0 голосов
/ 02 июня 2018

Суть проблемы в том, что вы включаете флаги ссылки в команду компиляции, а не саму команду ссылки.

Удалите --libs glib-2.0 из CFLAGS и добавьте его в новую переменную LFLAGS, который можно использовать в строке ссылки ...

exec: bin/test
    bin/test

clean:
    rm -f build/* bin/*

CFLAGS = -g -Wall -Wpedantic -Wno-padded -O $(shell pkg-config --cflags glib-2.0)
LFLAGS = $(shell pkg-config --libs glib-2.0)

INCLUDES = include/*.h

COMMON_DEPS = $(INCLUDES) Makefile

build/%.o: src/%.c $(COMMON_DEPS)
    $(CC) $(CFLAGS) -c $< -o $@

bin/test: /* functions.o*/ $(COMMON_DEPS)
    $(CC) $(LFLAGS) -o bin/test /* functions.o*/

[Примечание: я оставил остальную часть make-файла без изменений, но спецификация зависимости для bin/test выглядит очень странно.]

...