使用 GPLC 编译 GTK
Compile GTK with GPLC
正在尝试使用 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
的响应,因为它在 "string" 中。 我该如何解决?
最后,如果我做了一些丑陋的事情,例如:
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 函数的引用都未定义,我在链接期间遇到编译失败。 为什么?
在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)
回答
为了解决第一个问题,我只需要在 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
正在尝试使用 GPLC 编译 C GTK gui + Prolog 文件。我读到我可以通过使用 -C 'gcc flags here'
好的,我可以用
单独编译我的 GUIgcc foo.c `pkg-config --cflags --libs gtk+-2.0` -o $(NAME)
但是这在 GPLC 中不起作用,因为我会
'`pkg-config --cflags --libs gtk+-2.0`'
这意味着我不会得到 pkg-config
的响应,因为它在 "string" 中。 我该如何解决?
最后,如果我做了一些丑陋的事情,例如:
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 函数的引用都未定义,我在链接期间遇到编译失败。 为什么?
在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)
回答
为了解决第一个问题,我只需要在 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