在CLion下开发GTK+3的环境搭建

2018-07-18  本文已影响0人  祥龙翔天

在CLion下开发GTK+3——Windows篇

CLion目前对C的支持简直不能太好,和其他IDE相比,有丝滑般的感觉
采用Cmake的方式处理依赖,中间的东西变多,编译出可执行文件的时间变相对长很多
但是即便这样,使用Cmake后,代码可以跨平台编译,有利也有弊吧

前提

MSYS2

目前官网推荐使用MSYS2安装GTK+,但是个人不建议这样弄,原因如下

CLion

你需要自己完成CLion开发环境的搭建工作

下载GTK+3 bundle套件

既然用MSYS2在安装GTK+3那么麻烦,当然得有替代的方法,那就是使用编译好的GTK+3 bundle套件

GTK+3 bundle套件就是一个压缩文件,解压后即可用于开发,唯一的缺陷是版本不够新

去gtk+3-bundle仓库地址下载一个bundle即可,我这里下载的是gtk+bundle_3.10.4-20131202_win64.zip

gtk+3_bundle_web.png

gtk+bundle_3.10.4-20131202_win64.zip解压,解压目录随意,比如C:\gtk+bundle_3.10.4-20131202_win64

C:\gtk+bundle_3.10.4-20131202_win64\bin添加到系统环境变量

新建cmd命令窗口,依次执行命令pkg-config gtk+-3.0 --cflagspkg-config gtk+-3.0 --libs有如下输出说明GTK+3环境配置成功

pkg-config_result

在CLion中开发GTK+3

在进行下面的工作之前,你需要自己完成CLion开发环境的搭建工作

新建一个普通的C工程

new_project

创建完成后

new_project_finish.png

接下来就是在CMakeLists.txt文件中添加对GTK+3的依赖
在CMakeLists.txt中添加include目录

include_directories(
        C:/gtk+bundle_3.10.4-20131202_win64/include
        C:/gtk+bundle_3.10.4-20131202_win64/include/gtk-3.0
        C:/gtk+bundle_3.10.4-20131202_win64/include/cairo
        C:/gtk+bundle_3.10.4-20131202_win64/include/gdk
        C:/gtk+bundle_3.10.4-20131202_win64/include/glib-2.0
        C:/gtk+bundle_3.10.4-20131202_win64/include/pango-1.0
        C:/gtk+bundle_3.10.4-20131202_win64/include/atk-1.0
        C:/gtk+bundle_3.10.4-20131202_win64/include/gdk-pixbuf-2.0
        C:/gtk+bundle_3.10.4-20131202_win64/lib/glib-2.0/include
        C:/gtk+bundle_3.10.4-20131202_win64/lib/gtk-3.0/include
)

添加完成后,请一定记得Reload你的CMakeLists.txt

reload_cmakelist.png

接下来将如下GTK+3的示例代码拷贝到已有的main.c

#include <gtk/gtk.h>

static void activate(GtkApplication *app, gpointer user_data) {
    GtkWidget *window;
    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW (window), "Window");
    gtk_window_set_default_size(GTK_WINDOW (window), 200, 200);
    gtk_widget_show_all(window);
}

int main(int argc, char **argv) {
    GtkApplication *app;
    int status;

    app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
    g_signal_connect (app, "activate", G_CALLBACK(activate), NULL);
    status = g_application_run(G_APPLICATION (app), argc, argv);
    g_object_unref(app);

    return status;
}

CTR + F9编译你的工程

如果出现下图的类似undefined reference to `gtk_application_window_new'之类的错误

说明还有缺少一些依赖的库,在CMakeLists.txt文件中添加C:/gtk+bundle_3.10.4-20131202_win64/lib目录下所有.dll.a文件

link_libraries(
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libasprintf.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libatk-1.0.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libcairo-gobject.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libcairo-script-interpreter.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libcairo.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libcharset.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libcroco-0.6.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libffi.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libfontconfig.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libfreetype.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libgailutil-3.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libgdk-3.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libgdk_pixbuf-2.0.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libgettextlib.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libgettextpo.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libgettextsrc.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libgio-2.0.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libglib-2.0.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libgmodule-2.0.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libgobject-2.0.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libgthread-2.0.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libgtk-3.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libiconv.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libintl.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libjasper.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libjpeg.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/liblzma.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libpango-1.0.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libpangocairo-1.0.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libpangowin32-1.0.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libpixman-1.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libpng.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libpng16.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/librsvg-2.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libtiff.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libxml2.dll.a
        C:/gtk+bundle_3.10.4-20131202_win64/lib/libz.dll.a
)

Reload你的CMakeLists.txt

CTR + F9编译你的工程,

正如所期望的,生成了GtkTest.exe可执行文件

make_GtkTest.png

进入到相应的目录,双击GtkTest.exe即可运行

GtkTest.png
上一篇下一篇

猜你喜欢

热点阅读