2015-11-01 3 views
2

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

Ok, так что я могу comiple свой GUI в одиночку с

gcc foo.c `pkg-config --cflags --libs gtk+-2.0` -o $(NAME) 

Однако это не будет работать в ГПЛК, потому что я бы

'`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 будучи неопределенным. Почему?

ответ

1

Ответ

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

Вторая проблема возникла из-за того, что GPLC не видел gtk libs во время связывания. Это связано с тем, что я использовал флаг -C для передачи args компилятору gcc во время компиляции и связывания, это неверно, флаг -L является флагом, который должен использоваться для передачи аргументов gcc во время связывания в соответствии с gplc man.

Так мой последний рабочий 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 
2

Использование shell в Makefile:

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

EDIT:

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) 
+0

Спасибо. Это решает мою первую проблему, но я до сих пор не могу ее связать, я попытался добавить библиотеки во время ссылки в различном порядке, но gplc отказывается их видеть, gcc не имеет этой проблемы. – Zeth

+0

У вас есть редактирование, я никогда не использовал GPLC, но посмотрите, работает ли это –

+1

. Это не сработало. Но я обнаружил проблему с чтением через gplc man. Чтобы передать параметры компилятору gcc, используется флаг '-C', и для перехода к компоновщику необходимо использовать флаг' -L'! Это была моя проблема, поэтому ваш make с -L во время компоновки и -C при компиляции .c заставляет его работать. – Zeth

Смежные вопросы