美文网首页
在CLion下开发GTK+3的环境搭建

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

作者: 祥龙翔天 | 来源:发表于2018-07-18 14:08 被阅读0次

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

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

    前提

    MSYS2

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

    • MSYS2在安装GTK+3的时候会下载相应内容,没有设置源的话会很慢
    • MSYS2本身安装后就有好几百M的大小,再加上还要通过它来安装GTK+3,全部整下来1G左右。对于我这小固态硬盘而言,太占内存了

    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

    相关文章

      网友评论

          本文标题:在CLion下开发GTK+3的环境搭建

          本文链接:https://www.haomeiwen.com/subject/yahopftx.html