Команда оболочки для компиляции C в Gprbuild

Используя GtkAda, я пытаюсь использовать API ресурсов для включения файла Glade непосредственно в мой код.

Для этого мы можем сгенерировать код C из набора ресурсов, используя glib-compile-resources, которые затем могут быть связаны с кодом Ada.

Проблема в том, что этот код на C требует Gtk, который мы обычно получаем из команды pkg-config в Linux, такой как

gcc -c -x c `pkg-config --cflags gio-2.0` myglade.gresource.c

Я хотел бы знать, как предоставить такую ​​же информацию в файле проекта GPRBuild.

К вашему сведению, я уже пытался безуспешно использовать команду pkg-config в пакете компилятора для языка Си. Конечно, мне удалось собрать вручную, но это немного долго:)

2 ответа

Решение

Это может работать для вас:

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`"

Лучше всего будет делать то, что делает GtkAda: посмотрите на его shared.gpr.in файл, он использует токен @GTK_LIBS_GPR@ который будет заменен скриптом конфигурации, давая полезный shared.gpr,

Дело в том, что вам нужно выполнить вызов pkg-config и как-то собрать свой файл gpr из результата. GPRBuild не может сделать это для вас и обработать результат. Если вы знакомы с автоинструментами GNU, вы можете посмотреть, как GtkAda достигает этого:

GTK_LIBS_GPR устанавливается в aclocal.m4 с помощью макроса, который преобразует флаги в стиле C в массив GPR. Значение исходит от GTK_LIBS который запрашивается здесь через pkg-config.

Если вас не устраивают автоинструменты GNU, вы можете написать свой скрипт configure, используя базовые командные оболочки, язык сценариев, такой как Python, или любой другой инструмент, который вам удобен.

Другие вопросы по тегам