在Makefile中包含glib库

时间:2018-06-02 08:33:48

标签: c makefile compiler-errors glib

我不是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 :(得分:0)

问题的关键在于你在编译命令中包含链接标志而不是链接命令本身。

--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*/

[注意:我已经保留了makefile的其余部分,但是bin/test的依赖规范看起来很奇怪。]

答案 1 :(得分:0)

最后我以这种方式解决了它:

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)