Используя GtkAda, я пытаюсь использовать API ресурсов для включения файла Glade непосредственно в свой код.
Для этого мы можем сгенерировать код C из набора ресурсов, используя glib-компилировать-ресурсы, который затем можно связать с кодом Ada.
Проблема в том, что этот код C требует включения Gtk, которое мы обычно получаем из команды pkg-config под Linux, например
gcc -c -x c `pkg-config --cflags gio-2.0` myglade.gresource.c
Я хотел бы знать, как предоставить такую же информацию в файле проекта GPRBuild.
К вашему сведению, я уже безуспешно пытался использовать команду pkg-config внутри пакета компилятора для языка C. Конечно, мне удалось построить вручную, но это немного долго :)





Лучше всего будет сделать то, что делает GtkAda: посмотрите на его файл shared.gpr.in, он использует токен @GTK_LIBS_GPR@, который будет заменен сценарием настройки, давая пригодный для использования shared.gpr.
Дело в том, что вам нужно выполнить вызов pkg-config и создать файл gpr из результата как-то. GPRBuild не может сделать это за вас и обработать результат. Если вы знакомы с автоинструментами GNU, вы можете посмотреть, как GtkAda достигает этого:
GTK_LIBS_GPR устанавливается в аклокал.м4 с помощью макроса, который преобразует флаги в стиле C в массив GPR. Значение исходит из GTK_LIBS, который запрашивается здесь через pkg-config.
Если вы не знакомы с автоинструментами GNU, вы можете написать свой скрипт configure, используя базовые коммандос оболочки, язык сценариев, такой как Python, или любой другой инструмент, который вам удобен.
Это может сработать для вас:
project Config_Demo is
Pkg_Config := external_as_list ("PKG_CONFIG", " ");
package Compiler is
-- only this file needs the extra switches
for Switches ("myglade.gresource.c") use Pkg_Config;
end Compiler;
end Config_Demo;
а потом
gprbuild -P config_demo -XPKG_CONFIG = "`pkg-config -cflags gio-2.0`"
Мне было интересно, не могли бы вы предоставить специальное дополнение к базе данных конфигурации GPR, которое использовало бы функцию <external>, которая запускает внешнюю команду; но это допустимо только в элементе <compiler_description>, и введение для этого нового «компилятора» кажется… неправильным. Кроме того, не уверен, как получить результат в виде списка - он предназначен для запроса компилятора, например. -dumpmachine.
Ваше первое решение работает!... И я согласен с вами, предоставление специального описания компилятора в базе данных конфигурации георадара для этого кажется мне совершенно неправильным, поскольку это не является его основной целью.
Я надеялся, что есть другой способ :)