CMake and GTK+ 3: the easy way
来源:互联网 发布:网络电视台 编辑:程序博客网 时间:2024/06/04 00:58
If you look at my GitHub repositories you will notice that I’m a big fan ofCMake and I use it in all my C projects.
Recently I started playing with GTK+ 3.0 but most of the official projects use theautotools toolchain, so there is little documentation on how to use CMake with GTK+.
But what is CMake and why should you care?
CMake is an open-source system for managing the build process using native building environments such asmake.
I like it because it’s really easy to learn, at least compared to other build tools. It also produces aMakefile
with a nice looking output.
Before we start
The sofware I’m using for this small guide is:
- An up-to-date Fedora 17 (yep, I changed distro again. Sigh)
- CMake version 2.8.8
- GNU Make version 3.82
- GTK+ 3.4.4
So if you encounter any problem RTFC (Read The Funny Changelog, of course).
Our sample and simple program
To demostrate how to use CMake we will use the classic GTK+ Hello World.
#include <gtk/gtk.h>static voidactivate(GtkApplication *app, gpointer user_data) { GtkWidget *window; window = gtk_application_window_new(app); gtk_window_set_title(GTK_WINDOW(window), "Hello GNOME"); gtk_widget_show_all(window);}intmain(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);}
To compile it from the command line run:
$ gcc -o hello `pkg-config --libs --cflags gtk+-3.0` hello.c$ ./hello
Enter CMake
The usual steps when using CMake are:
- Write a CMakeLists.txt file with the instruction on how to build your software
- Make a directory where you will build your software
- Run
cmake
- Run
make
- Congratulate yourself and use the time saved to troll people on the internet
We start by writing our CMakeLists.txt
file in the directory containing our source.
#Set the name and the supported language of the projectproject(hello-world C)# Set the minimum version of cmake required to build this projectcmake_minimum_required(VERSION 2.6)# Use the package PkgConfig to detect GTK+ headers/library filesfind_package(PkgConfig REQUIRED)pkg_check_modules(GTK3 REQUIRED gtk+-3.0)# Setup CMake to use GTK+, tell the compiler where to look for headers# and to the linker where to look for librariesinclude_directories(${GTK3_INCLUDE_DIRS})message(staus "GTK3_INCLUDE_DIRS = ${GTK3_INCLUDE_DIRS}")link_directories(${GTK3_LIBRARY_DIRS})message(status " GTK3_LIBRARY_DIRS = ${GTK3_LIBRARY_DIRS}")# Add other flags to the compileradd_definitions(${GTK3_CFLAGS_OTHER})message(status " GTK3_CFLAGS_OTHER = ${GTK3_CFLAGS_OTHER}")# Add an executable compiled from hello.cadd_executable(hello hello.c)# Link the target to the GTK+ librariestarget_link_libraries(hello ${GTK3_LIBRARIES})message(status "GTK3_LIBRARIES = ${GTK3_LIBRARIES}")message(status "pkgs_cflags = ${PKGS_CFLAGS}")
Then we make the build folder
$ mkdir build$ cd build
And we tell cmake to build the Makefile
$ cmake .. # Point cmake to the folder containing CMakeLists.txt
Finally we use make
to build our program and we run it
$ make$ ./hello
That’s it! I can’t tell you if this process works well for larger projects because I’m just getting started with GTK+ and CMake.
You should also check out some pre-made FindGTK3.cmake
modules available, they may be better suited to your needs.
http://francesco-cek.com/cmake-and-gtk-3-the-easy-way/
- CMake and GTK+ 3: the easy way
- windbg the easy way
- windbg the easy way
- windbg the easy way
- [转]Hosting Git repositories, The Easy (and Secure) Way
- Hosting Git repositories, The Easy (and Secure) Way
- Hosting Git repositories, The Easy (and Secure) Way
- Hosting Git repositories, The Easy (and Secure) Way
- 【转帖】windbg the easy way
- Generate Java objects for FpML using JAXB and Maven: The Easy Way!
- Playing With Ext The Easy Way
- Developing AJAX Applications the Easy Way
- Easy way to install the bluetooth(BCM2045A)
- Installing PDO_MYSQL on CentOS (the easy way)
- Tutorial:Playing With Ext The Easy Way(蹒跚学步)
- The Easy Way to Extract Useful Text from Arbitrary HTML
- Emulating Raspberry Pi in Windows the easy way
- Porting Over iPad game to iphone the easy way cocos2d
- Xcode7.1 网络请求报错 -- @ShinePug
- XP不能ping通—局域网内的开发板与ubuntu虚拟机
- Android开发工具下载
- 深度干货 | 双十一电商大促流量承接与变现的产品设计分析
- 收藏(数据结构)
- CMake and GTK+ 3: the easy way
- 微信营销
- 【数据库】数据库的bak格式备份与还原
- 收藏(时间复杂度)
- 解析动态JSON入库
- 对jsp+servlet+mysql中乱码问题的部分总结
- 7-《电子入门趣谈》第一章_一切从单片机开始-1.3.4中断
- FindPkgConfig
- 结构体,枚举,常量,与变量