Компиляция приложений gtk

Для разработки приложений с использованием библиотеки gtk нужно немного: установить пакет libgtk2.0-dev и должным образом отредактировать make файл вашего приложения. В принципе ничего сложного. Но я хотел бы подробнее остановиться на этой строчке, которую нужно добавить в make файл.

Полная строка компиляции вашего приложения должна выглядеть примерно так:

g++ main.cpp -o main `pkg-config --cflags --libs gtk+-2.0`

Здесь main.cpp — файл с иcходным кодом вашего приложения, main — имя исполняемого модуля.

Добавочная строка, заключенная в обратные апострофы — тот самый придаток, необходимый для компиляции приложения, использующего библиотеку gtk. Она приведена во всех книгах и руководствах по gtk, но практически нигде не дается ее расшифровка. Что она делает? Зачем нужна? Давайте разбираться.

Начнем с апострофов. Они нужны для изменения порядка выполнения операций. Сначала выполняется команда заключенная в них, а потом ее результат передается компилятору g++ при его вызове. Если бы строка была заключена в обычные кавычки, то она передавалась бы компилятору как есть. Разумеется, он не смог бы ее обработать и возникла бы ошибка. По сути обратные апострофы делают то же самое, что и конструкция $(). То есть, команда, приведенная ниже эквивалентна исходной

g++ main.cpp -o main $(pkg-config --cflags --libs gtk+-2.0)

Но, поскольку эта строка прописывается в make файле, а утилита make иначе интерпретирует конструкцию $(), то второй вариант не используют. Результат работы строки, заключенной в обратные апострофы подставляется на место ее вызова. То есть итоговый вызов компилятора имеет вид:

g++ main.cpp -o main Результат_Работы_Строки_В_Апострофах

С этим разобрались. Теперь посмотрим на то, что делает эта строка в обратных апострофах:

pkg-config --cflags --libs gtk+-2.0

В ней вызывается утилита pkg-config. Она предназначена для сбора и должного оформления информации об используемой библиотеке (в нашем случае, gtk+-2.0). Работает это следующим образом. При установке библиотеки gtk+-2.0 (и не только ее) в специальный каталог помещается текстовый файл с расширением pc. В нем сохраняется список библиотек и заголовочных файлов, которые необходимы для компиляции вашего приложения. Наш файл gtk+-2.0.pc расположен в каталоге /usr/lib/x86_64-linux-gnu/pkgconfig/ (у вас он может отличаться) и имеет следующее содержание.

prefix=/usr
exec_prefix=${prefix}
libdir=/usr/lib/x86_64-linux-gnu
includedir=${prefix}/include
target=x11

gtk_binary_version=2.10.0
gtk_host=x86_64-pc-linux-gnu

Name: GTK+
Description: GTK+ Graphical UI Library (${target} target)
Version: 2.24.30
Requires: gdk-${target}-2.0 atk cairo gdk-pixbuf-2.0 gio-2.0 pangoft2
Libs: -L${libdir} -lgtk-${target}-2.0 
Cflags: -I${includedir}/gtk-2.0 .

Утилита pkg-config берет этот файл, анализирует его содержимое и передает компилятору g++. Ключи —cflags и —libs указывают pkg-config какую информацию нужно извлекать из pc файла. А именно:

—cflags — выводить флаги препроцессора и компилятора;

—libs — выводить флаги компоновщика.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *