在 Makefile 中包含 glib 库

Include glib library in Makefile

我不是 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"
...

我不明白为什么

问题的症结在于您在编译命令中包含了 link 标志,而不是 link 命令本身。

CFLAGS中删除--libs glib-2.0并将其添加到可在link行上使用的新变量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 的依赖项规范看起来确实很奇怪。]

最后我是这样解决的:

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)