在Windows中如何更容易地连接gtk库和cmake?

我现在通过手动包含所有必需的path(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) 

Solutions Collecting From Web of "在Windows中如何更容易地连接gtk库和cmake?"

只需将包含pkg-config(位于您的gtk-bundle / bin目录中)的目录添加到您的PATH。 那样,CMake就会找到它。

下面是一个用GTK2编写的示例应用程序的CMakeLists.txt:

 project (gtk-test) cmake_minimum_required (VERSION 2.4) 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; } 

我使用CMake 2.4和CMake 2.8以及MinGW在Win XP上进行了测试,它可以正常工作。 它也应该在MinGW之外工作。

我的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) 

Update3 :再次从邮件列表中引用 :

…这种传播到Windows的一个主要例子是libGTK +和朋友(正如在这个线程中提到的那样)。 一些PLplot驱动程序依赖于GTK +库的一部分。 我引用了一位最近向PLplot开发人员列出的开发人员(Werner Smekal),他们介绍了让这些驱动程序在Windows上工作的简单性:

在Windows中使用开罗驱动程序,或在Windows上使用gtk +进行plplot

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获&#x5F97; 。

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设备。 由于X-Header不存在,xcairo将不会生成。

所以看来你错过了:

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