将 libIEC61850 库与 C 的 GTK3+ 链接时出现问题

Trouble in linking the libIEC61850 library with GTK3+ for C

我在合并两个独立库的编译和链接时遇到问题。以下是其中一个库 (libIEC61850) 的 makefile:

LIBIEC_HOME=../../iec61850/libiec61850-1.4.0/
#Add this somehow:
#cc `pkg-config --cflags gtk+-3.0` main.c -o a.out `pkg-config --libs gtk+-3.0`

PROJECT_BINARY_NAME = a.out
PROJECT_SOURCES += main.c
INCLUDES += -I.

include $(LIBIEC_HOME)/make/target_system.mk
include $(LIBIEC_HOME)/make/stack_includes.mk

all:    $(PROJECT_BINARY_NAME)

include $(LIBIEC_HOME)/make/common_targets.mk

$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
    $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)

clean:
    rm -f $(PROJECT_BINARY_NAME)    

我想在 main.c 的编译中添加 gtk-3.0 库。要执行典型的 gtk3 函数,我只需写:

$ cc `pkg-config --cflags gtk+-3.0` main.c -o a.out `pkg-config --libs gtk+-3.0`

并且生成的可执行文件没有问题。我怎样才能将这两者结合起来?

我会将 pkg-config --cflags gtk+-3.0 添加到 CFLAGS,将 pkg-config --libs gtk+-3.0 添加到 LDLIBS:

CFLAGS += $(shell pkg-config --cflags gtk+-3.0)
LDLIBS += $(shell pkg-config --libs gtk+-3.0)

假设所有配方都遵循常规变量命名,它们将按照您想要的方式被吸入构建命令。

如果您不喜欢将标志传递给所有内容,请使用 target specific variables

已修复。以下是结合 libIEC61850 和 GTK+ 3.0 库的 Makefile:

# Makefile to combine the libIEC61850 and GTK+-3.0 Libraries
# path to libIEC61850:
LIBIEC_HOME=../../iec61850/libiec61850-1.4.0/

#Add this somehow:
#cc `pkg-config --cflags gtk+-3.0` main.c -o a.out `pkg-config --libs gtk+-3.0`

PROJECT_BINARY_NAME = a.out
PROJECT_SOURCES += main.c

include $(LIBIEC_HOME)/make/target_system.mk
include $(LIBIEC_HOME)/make/stack_includes.mk

all:    $(PROJECT_BINARY_NAME)

include $(LIBIEC_HOME)/make/common_targets.mk

$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
        $(CC) $(CFLAGS) $(shell pkg-config --cflags gtk+-3.0) $(LDFLAGS) \
        -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) \
        $(LIB_NAME) $(LDLIBS) $(shell pkg-config --libs gtk+-3.0)

clean:
        rm -f $(PROJECT_BINARY_NAME)