使用GPLC编译GTK

时间:2015-11-01 07:16:14

标签: c gcc gtk gnu-prolog

尝试使用GPLC编译C GTK gui + Prolog文件。我读到我可以使用-C 'gcc flags here'

从GPLC向gcc编译器传递多个标志

好的,我可以单独使用

编辑我的GUI
gcc foo.c `pkg-config --cflags --libs gtk+-2.0` -o $(NAME)

然而,这在GPLC中不起作用,因为我有

'`pkg-config --cflags --libs gtk+-2.0`'

这意味着我无法获得pkg-config的响应,因为它位于"字符串"内。 我该如何解决?

最后,如果我做了像丑陋的事情:

gplc -c foo1.c -C '-I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include   -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo   -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/freetype2 -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype'
gplc -c foo2.pl
gplc foo1.o foo2.o -o gyges

由于未定义对GTK函数的所有引用,因此在链接期间出现编译失败。的为什么吗

2 个答案:

答案 0 :(得分:2)

Makefile中使用shell

GTK_FLAGS = $(shell pkg-config --cflags --libs gtk+-2.0)
gplc -c foo1.c -C $(GTK_FLAGS)

修改

CC = gplc
GTK_CFLAGS = $(shell pkg-config --cflags gtk+-2.0)
GTK_LIBS = $(shell pkg-config --libs gtk+-2.0)
OBJECTS = foo1.o foo2.o

all: gyges

foo1.o: foo1.c
    $(CC) -c foo1.c -o foo1.o $(GTK_CFLAGS)

foo2.o: foo2.pl
    $(CC) -c foo2.pl -o foo2.o

gyges: $(OBJECTS)
    $(CC) $(OBJECTS) -o gyges $(GTK_LIBS)

答案 1 :(得分:1)

<强>答案

要解决第一个问题,我只需要在Makefile内使用shell,就像Alter Mann指出的那样。

第二个问题是因为GPLC在链接期间没有看到gtk库。这是因为我在编译和链接期间使用-C标志将args传递给gcc编译器,这是不正确的,-L标志是在链接期间必须用于将args传递给gcc的标志据gplc人说。

所以我的最后工作MAKE看起来像这样:

CC = gplc
GTK_CFLAGS = $(shell pkg-config --cflags gtk+-2.0)
GTK_LIBS = $(shell pkg-config --libs gtk+-2.0)
OBJECTS = foo1.o foo2.o

all: name

foo1.o:
     $(CC) -c foo1.c -o foo1.o -C '$(GTK_CFLAGS)'

foo2.o:
    $(CC) -c foo2.pl -o foo2.o

name: $(OBJECTS)
    $(CC) $(OBJECTS) -o name -L '$(GTK_LIBS)'
    rm *.o