代码
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_show (window);
gtk_main ();
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.3)
project(gtk C)
# 包含配置文件模块
INCLUDE(UsePkgConfig)
# 查找gtk配置文件
FIND_PACKAGE(GTK)
# 用配置文件gtk+-2.0对几个变量GTK2_INCLUDE_DIR、GTK2_LINK_DIR、GTK2_LINK_FLAGS、GTK2_CFLAGS赋值
PKGCONFIG(gtk+-2.0 GTK2_INCLUDE_DIR GTK2_LINK_DIR GTK2_LINK_FLAGS GTK2_CFLAGS)
# 用配置文件gthread-2.0对几个变量GTHREAD_INCLUDE_DIR GTHREAD_LINK_DIR GTHREAD_LINK_FLAGS+- GTHREAD_CFLAGS赋值
PKGCONFIG(gthread-2.0 GTHREAD_INCLUDE_DIR GTHREAD_LINK_DIR GTHREAD_LINK_FLAGS+- GTHREAD_CFLAGS)
# 判断GTK2_INCLUDE_DIR是否有值
IF (GTK2_INCLUDE_DIR)
# 用变量GTK2_CFLAGS的值对CMAKE_C_FLAGS赋值,其中为有编译选项
SET(CMAKE_C_FLAGS "${GTK2_CFLAGS} ")
# 将变量GTK2_LINK_FLAGS中的"-l"用空格“”替换
STRING(REGEX REPLACE "-l" "" GTK_LIBRARIES "${GTK2_LINK_FLAGS} ")
# 变量GTK_LIBRARIES中的所有空格用分号“;”替换
SEPARATE_ARGUMENTS(GTK_LIBRARIES)
# -D定义的选项添加到C或者C++编译行中
ADD_DEFINITIONS(-DHAVE_GTK2)
ELSE (GTK2_INCLUDE_DIR)
# 如果GTK2_INCLUDE_DIR没有值,则输出错误信息:
# "GTK or GTK2 is required to build this project."
MESSAGE(FATAL_ERROR "GTK or GTK2 is required to build this project.")
ENDIF (GTK2_INCLUDE_DIR)
ADD_EXECUTABLE(gtkhello main.c)
TARGET_LINK_LIBRARIES(gtkhello ${GTK2_LINK_FLAGS})
运行结果