如何在Windows中使用cmake更轻松地链接gtk库?

Gtk*_*ker 1 windows gtk cmake gtk2

我现在通过手动包含所有必需的路径(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)
Run Code Online (Sandbox Code Playgroud)

lib*_*rce 11

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

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

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})
Run Code Online (Sandbox Code Playgroud)

和我的测试应用程序的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;
}
Run Code Online (Sandbox Code Playgroud)

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