2010-04-28 3 views
1

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

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) 

ответ

0

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

Согласно this post в списке рассылки 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) 

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

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

if(UNIX) 
    ... 
endif(UNIX) 

Update3: Опять quote из списка рассылки:

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

драйвер Cairo в Windows, или с использованием GTK + для plplot на Windows,

1) Скачать пакет все-в-одном из стека GTK +, включая зависимости третьих сторон для окон: 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: \ Разработка \ GTK

3) Установить переменные окружения, так что CMake можно найти PKF-CONFIG

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

4) CMake найти PKG-конфигурации и все библиотеки необходимо построить устройства pdfcairo, pscairo, pngcairo и svgcairo. xcairo не будет построен , так как X-Headers нет.

Так что, кажется, вам не хватает:

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

Я пробовал, прежде чем использовать уродливый, он не может найти gtk в окнах. – Gtker

+0

См. Часть ответа на обновление. –

+0

Я пробовал как GTK/GTK2, ни один из них не найден cmake. – Gtker

6

Просто добавьте каталог, содержащий PKG-конфигурации (который находится в вашем GTK-расслоением каталоге/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.

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