在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+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 --cflags
和pkg-config gtk+-3.0 --libs
有如下输出说明GTK+3环境配置成功
在CLion中开发GTK+3
在进行下面的工作之前,你需要自己完成CLion开发环境的搭建工作
新建一个普通的C工程
创建完成后
接下来就是在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
接下来将如下GTK+3的示例代码拷贝到已有的main.c
#include
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可执行文件
进入到相应的目录,双击GtkTest.exe即可运行