Как мне проще связать библиотеку gtk с cmake в windows? - PullRequest
1 голос
/ 28 апреля 2010

Я сейчас делаю это очень уродливо, вручную включая все необходимые пути (комплект gtk находится в D:/Tools/gtk+-bundle_2.20.0-20100406_win32):

include_directories(D:/Tools/gtk+-bundle_2.20.0-20100406_win32/include/gtk-2.0 D:/Tools/gtk+-bundle_2.20.0-20100406_win32/include/glib-2.0 D:/Tools/gtk+-bundle_2.20.0-20100406_win32/lib/glib-2.0/include D:/Tools/gtk+-bundle_2.20.0-20100406_win32/include/cairo D:/Tools/gtk+-bundle_2.20.0-20100406_win32/include/pango-1.0 D:/Tools/gtk+-bundle_2.20.0-20100406_win32/lib/gtk-2.0/include D:/Tools/gtk+-bundle_2.20.0-20100406_win32/include/atk-1.0)
link_directories(D:/Tools/gtk+-bundle_2.20.0-20100406_win32/lib)

target_link_libraries(MyProgram gtk-win32-2.0.lib)

Ответы [ 2 ]

8 голосов
/ 24 февраля 2011

Просто добавьте каталог, содержащий pkg-config (который находится в вашем каталоге gtk-bundle / bin), в ваш PATH. Таким образом, CMake найдет его.

Вот файл CMakeLists.txt для примера приложения, написанного на GTK2:

cmake_minimum_required (VERSION 2.4)
project (gtk-test)

find_package (PkgConfig REQUIRED)
pkg_check_modules (GTK2 REQUIRED gtk+-2.0)

include_directories (${GTK2_INCLUDE_DIRS})
link_directories (${GTK2_LIBRARY_DIRS})
add_executable (gtk-test main.c)
add_definitions (${GTK2_CFLAGS_OTHER})
target_link_libraries (gtk-test ${GTK2_LIBRARIES})

И файл main.c для моего тестового приложения:

#include <gtk/gtk.h>

int main (int argc, char **argv)
{
    GtkWidget *window;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (window), "Hello world !");
    g_signal_connect (G_OBJECT (window), "destroy", gtk_main_quit, NULL);

    gtk_widget_show_all (window);
    gtk_main ();

    return 0;
}

Я протестировал его на Win XP с CMake 2.4 и CMake 2.8 и MinGW, и это работает. Он также должен работать за пределами MinGW.

0 голосов
/ 28 апреля 2010

Мои знания CMake несколько устарели, и я пытаюсь дистанцироваться от Windows, потому что мне это неприятно, но именно для этого и должно быть FindGTK.cmake.

Согласно этой записи в списке рассылки CMake вы должны:

FIND_PACKAGE(GTK)

IF(GTK_FOUND)
   INCLUDE_DIRECTORIES(${GTK_INCLUDE_DIR})
   ADD_EXECUTABLE(my_gtk_exe my_gtk_exe.cxx)
   TARGET_LINK_LIBRARIES(my_gtk_exe ${GTK_LIBRARIES})
ENDIF(GTK_FOUND)

Обновление : Возможно, FindGTK.cmake действительно слишком стар и относится к GTK1, вы можете вместо этого попробовать FindGTK2.cmake. Если он не является частью вашей версии CMake, вы можете попробовать получить его по адресу здесь .

Update2 : Действительно, приведенная выше ссылка FindGTK2 не подходит для вас. Вся его логика заключена в:

if(UNIX)
  ...
endif(UNIX)

Обновление3 : Снова цитата из списка рассылки:

... Одним из ярких примеров такого распространения в Windows является libGTK + и друзья (как один другие уже упоминали в этой теме). Некоторые драйверы PLplot зависят от части GTK + стек библиотек. Я цитирую одного из наших разработчиков (Вернер Смекал), который недавно сообщил в список разработчиков PLplot о том, как просто заставить эти драйверы работать на windows:

Драйвер Cairo в Windows или использование gtk + для plplot в Windows

1) Загрузите пакет «все в одном» стека GTK +, включая сторонние зависимости для windows: http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.12/gtk+-bundle-2.12.9.zip доступно от http://www.gtk.org/download-windows.html.

2) Разверните пакет в каталог, например, C: \ Development \ GTK

3) Установите переменные окружения, чтобы CMake мог найти pkf-config

    set PKG_CONFIG_PATH=C:\Development\gtk\lib\pkgconfig
    set PATH=C:\Development\gtk\bin;%PATH%

4) CMake найдет pkg-config и все библиотеки, необходимые для сборки устройства pdfcairo, pscairo, pngcairo и svgcairo. xcairo не будет построен поскольку X-заголовки отсутствуют.

Похоже, вам не хватает:

set PKG_CONFIG_PATH=C:\path\to\gtk\lib\pkgconfig
set PATH=C:\path\to\gtk\bin;%PATH%
...