2

我现在以一种非常丑陋的方式手动包含所有必需的路径(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)
4

2 回答 2

15

2019-10-29 编辑:虽然这个答案仍然有效,但请注意,自 2011 年我的原始答案以来,CMake 已经发展了很多。在“现代 CMake”上进行一些搜索,因为有许多语法和最佳实践变化。

原答案:

只需将包含 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})

我的测试应用程序的 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 之外工作。

于 2011-02-24T13:53:02.810 回答
0

我的 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+ 库堆栈。我引用了我们的一位开发人员 (Werner Smekal) 的话,他最近向 PLplot 开发人员列表报告了让这些驱动程序在 Windows 上工作是多么简单:

Windows 中的 Cairo 驱动程序或在 Windows 上使用 gtk+ 进行 plplot

1) 下载 GTK+ 堆栈的一体式捆绑包,包括 Windows 的 3rd 方依赖项: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 设备所需的所有库。由于 X-Headers 不存在,因此不会构建 xcairo。

因此,您似乎缺少:

set PKG_CONFIG_PATH=C:\path\to\gtk\lib\pkgconfig
set PATH=C:\path\to\gtk\bin;%PATH%
于 2010-04-28T14:12:26.433 回答