2010-04-28 6 views
1

Je suis en train de faire d'une manière très laid en incluant manuellement tout le chemin nécessaire (le faisceau de gtk est à D:/Tools/gtk+-bundle_2.20.0-20100406_win32):Comment lier gtk bibliothèque plus facilement avec cmake dans 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) 

Répondre

0

Ma connaissance CMake est un peu daté, et j'essaie de me distancer de Windows parce que je trouve ça désagréable, mais c'est ce que FindGTK.cmake devrait être pour.

Selon this post sur la liste de diffusion CMake vous devez:

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) 

Mise à jour: Il est peut-être que le FindGTK.cmake est en effet trop vieux et fait référence à GTK1, vous voudrez peut-être essayer FindGTK2.cmake à la place. S'il ne fait pas partie de votre version CMake, vous pouvez essayer de l'obtenir à partir du here.

Update2: En effet, le lien FindGTK2 ci-dessus n'est pas bon pour vous. Tout ce qu'il est logique est jointe à:

if(UNIX) 
    ... 
endif(UNIX) 

Update3: Encore une fois un quote de la liste de diffusion:

... Un exemple de cette diffusion aux fenêtres est libgtk + et les amis (comme un autre a mentionné dans ce fil). Certains des pilotes PLplot dépendent de parties de la pile de bibliothèques GTK +. Je cite un de nos développeurs (Werner Smekal) qui a récemment déclaré à la liste devel PLplot sur la façon dont il est simple d'obtenir les pilotes de travailler sur les fenêtres:

pilote du Caire dans Windows ou en utilisant GTK + pour plplot sous windows

1) Téléchargez le tout-en-un paquet de la pile GTK + dépendances, y compris 3 parties pour les fenêtres: http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.12/gtk+-bundle-2.12.9.zip disponible à partir http://www.gtk.org/download-windows.html.

2) Développer le paquet dans un répertoire, par ex. C: \ Développement \ gtk

3) Définir les variables d'environnement afin que CMake peuvent trouver PKF-config

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

4) CMake trouver pkg-config et toutes les bibliothèques nécessaire pour construire les dispositifs pdfcairo, pscairo, pngcairo et svgcairo. xcairo ne sera pas construit puisque les X-Headers ne sont pas présents.

Il semble vous manque le:

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

J'ai essayé cela avant d'utiliser le moche, il ne peut pas trouver gtk dans windows. – Gtker

+0

Veuillez voir la partie mise à jour de la réponse. –

+0

J'ai essayé les deux GTK/GTK2, aucun ne peut être trouvé par cmake. – Gtker

6

il suffit d'ajouter le répertoire qui contient pkg-config (qui est dans votre gtk-paquet/bin) à votre PATH. De cette façon, CMake le trouvera.

Voici un CMakeLists.txt pour un exemple d'application écrit en 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}) 

Et le fichier main.c pour mon application test:

#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; 
} 

Je l'ai testé sur Windows XP avec CMake 2.4 et CMake 2.8 et MinGW, et cela fonctionne. Il devrait également fonctionner en dehors de MinGW.

Questions connexes