2009-06-24 2 views
4

Я пытаюсь построить мир привет с использованием GTK, которая включает в себя строку:файлы заголовков в подкаталогах (например, GTK/gtk.h против GTK-2,0/GTK/gtk.h)

#include <gtk/gtk.h> 

, как вы ожидаете.

Makefile, поставляется имеет следующую строку:

GTK_INCLUDE = -I/usr/local/include 

поэтому было бы ожидать, чтобы найти gtk.h в /usr/local/include/gtk/gtk.h. Однако в моей системе он находится в /usr/local/include/gtk-2.0/gtk/gtk.h, то есть в подкаталоге version'ed.

Очевидно, что в этом случае я могу добавить -I/usr/local/include/gtk-2.0 в Makefile, но та же проблема возникает с зависимостями gtk.h и так далее.

Есть ли хороший способ справиться с этим? Могла ли конфигурация использоваться для определения местонахождения файлов заголовков и добавления соответствующих каталогов include? Я почти ничего не знаю о настройке, но, похоже, он узнает о системе во время сборки, что я и делаю.

Является ли это обычным явлением или у меня есть некоторая структура каталогов freak, которая является реальной проблемой?

Спасибо за любые указатели!

+0

Duplicate: http://stackoverflow.com/questions/510098 – ephemient

ответ

8

Вы должны использовать pkg-config, чтобы получить включают пути:

$ pkg-config --cflags gtk+-2.0 
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 

Вы также должны использовать его, чтобы получить библиотеки:

$ pkg-config --libs gtk+-2.0 
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lz -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 

(выход из этих команд будет варьироваться в зависимости от и всегда будут правильными для вашего распространения.)

+0

Спасибо, это похоже на то, что мне нужно - я признаю, что некоторые из других включают в себя, что ваш пример pkg-config создает (например, pango), как необходимость в более конкретной директории include. – Ray2k

4

Вероятно, вы должны создать символическую ссылку, как:

ln -s /usr/local/include/gtk /usr/local/include/gtk-2.0 

но вы можете сначала попробовать переустановить пакет GTK.

+1

Я думал об этом, но это не так что нужно делать, особенно учитывая все остальное, что нужно изменить таким же образом. – Ray2k

2

Я не использовал gtk в течение длительного времени, но, как правило, это нормально в Linux, так это то, что есть сценарий, называемый packagename-config (в данном случае, возможно gtk-config), который поставляется с заголовками разработки , который должен сделать ваш make-файл, чтобы получить правильные пути включения и флаги компоновщика для пакета, используя -cflags и -libs соответственно.

Так попробовать что-то вроде

GTK_INCLUDE=`gtk-config --cflags` 

(обратите внимание на использование обратных кавычек, а не апостроф)

И вы, вероятно, также необходимо добавить вывод gtk-config --libs своим LDFLAGS для того, чтобы убедиться, что вы связывая все правильные вещи.

+1

AFAIR, gtk-config был заменен общим pkg-config давно (как и большинство других сценариев стиля packagename-config). – CesarB