GTK+ How To

We've decided to add a how-to-do-what-you-want section to the Wiki pages, where we provide examples and explanations to questions asked about various aspects of GTK+.

If you have a question that needs answering, or have an answer to a question (or even both!), feel free to add them to this collection yourself.

Introduction

How do I:

  1. Create a simple GTK+ project using Autotools?

Best practises for using GTK+ in your project

The examples are assuming an autotooled setup, many of the tips can be adapted to othr build systems if needed.

Good example: http://git.gnome.org/cgit/gnome-power-manager/tree/configure.ac

  • Use AM_SILENT_RULES

m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
  • Compilation warnings:

See this blog post: http://blogs.gnome.org/otte/2008/12/22/warning-options/

GNOME_COMPILE_WARNINGS(maximum)

if test "$GCC" = "yes"; then
        WARNINGFLAGS="$WARNINGFLAGS -Wall"
        WARNINGFLAGS="$WARNINGFLAGS -Wextra"                         #Company
#       WARNINGFLAGS="$WARNINGFLAGS -Waggregate-return"
        WARNINGFLAGS="$WARNINGFLAGS -Wcast-align"
        WARNINGFLAGS="$WARNINGFLAGS -Wcast-align -Wno-uninitialized"
        WARNINGFLAGS="$WARNINGFLAGS -Wclobbered"
        WARNINGFLAGS="$WARNINGFLAGS -Wdeclaration-after-statement"
        WARNINGFLAGS="$WARNINGFLAGS -Wempty-body"
        WARNINGFLAGS="$WARNINGFLAGS -Werror"
        WARNINGFLAGS="$WARNINGFLAGS -Wformat-nonliteral"
        WARNINGFLAGS="$WARNINGFLAGS -Wformat-security"
        WARNINGFLAGS="$WARNINGFLAGS -Wignored-qualifiers"
        WARNINGFLAGS="$WARNINGFLAGS -Winit-self"
        WARNINGFLAGS="$WARNINGFLAGS -Winline"
        WARNINGFLAGS="$WARNINGFLAGS -Winvalid-pch"                   #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wlogical-op"                    #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wmissing-declarations"
        WARNINGFLAGS="$WARNINGFLAGS -Wmissing-format-attribute"
        WARNINGFLAGS="$WARNINGFLAGS -Wmissing-include-dirs"
#       WARNINGFLAGS="$WARNINGFLAGS -Wmissing-noreturn"
        WARNINGFLAGS="$WARNINGFLAGS -Wmissing-parameter-type"
        WARNINGFLAGS="$WARNINGFLAGS -Wmissing-prototypes"            #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wno-missing-field-initializers" #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wno-strict-aliasing"
        WARNINGFLAGS="$WARNINGFLAGS -Wnested-externs"                #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wno-unused-parameter"           #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wold-style-definition"          #Company
        WARNINGFLAGS="$WARNINGFLAGS -Woverride-init"
        WARNINGFLAGS="$WARNINGFLAGS -Wpacked" #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wpointer-arith"
        WARNINGFLAGS="$WARNINGFLAGS -Wredundant-decls"
        WARNINGFLAGS="$WARNINGFLAGS -Wreturn-type"
        WARNINGFLAGS="$WARNINGFLAGS -Wshadow"
#       WARNINGFLAGS="$WARNINGFLAGS -Wsign-compare"
        WARNINGFLAGS="$WARNINGFLAGS -Wswitch-default"                #Company
#       WARNINGFLAGS="$WARNINGFLAGS -Wswitch-enum"
        WARNINGFLAGS="$WARNINGFLAGS -Wsync-nand"                     #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wtype-limits"
        WARNINGFLAGS="$WARNINGFLAGS -Wundef"                         #Company
#       WARNINGFLAGS="$WARNINGFLAGS -Wuninitialized"
        WARNINGFLAGS="$WARNINGFLAGS -Wunsafe-loop-optimizations"     #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wwrite-strings"
else
        WARNINGFLAGS=""
        WARNINGFLAGS=""
fi
AC_SUBST(WARNINGFLAGS)
AC_SUBST(WARNINGFLAGS)

Also, gcc warnings collected by BenjaminOtte from http://cgit.freedesktop.org/swfdec/swfdec/tree/configure.ac#n32 and AS_COMPILER_FLAGS macro from http://cgit.freedesktop.org/swfdec/swfdec/tree/m4/as-compiler-flag.m4

GNOME_COMPILE_WARNINGS(maximum)
  • Only single includes:

CPPFLAGS="${CPPFLAGS} -DG_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES"
  • Not using deprecated symbols by default:

CPPFLAGS="${CPPFLAGS} -DG_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
  • Use accesor functions instead direct access by default:

CPPFLAGS="${CPPFLAGS} -DGSEAL_ENABLE"

Attic/Gtk+/HowTo (last edited 2013-11-22 23:52:05 by WilliamJonMcCann)