Компилировать GTK с GPLC

Попытка скомпилировать файл C GTK gui + Prolog с использованием GPLC. Я прочитал, что могу передать несколько флагов компилятору gcc из GPLC, используя-C 'gcc flags here'

Хорошо, так что я могу скомпоновать мой графический интерфейс наедине с

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 ответа

Решение

Ответ

Чтобы решить первую проблему, мне просто нужно было использовать оболочку внутри Makefile как указал Альтер Манн.

Вторая проблема возникла из-за того, что GPLC не видел библиотеки gtk во время линковки. Это потому, что я использовал -C флаг для передачи аргументов компилятору gcc во время компиляции и связывания, это неверно, -L flag - это флаг, который должен использоваться для передачи аргументов в gcc во время компоновки в соответствии с man 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

Используйте оболочку в Makefile:

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)
Другие вопросы по тегам