Команда оболочки для компиляции C в Gprbuild - PullRequest
0 голосов
/ 28 февраля 2019

Используя 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 .

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

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

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

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`"
0 голосов
/ 28 февраля 2019

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

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

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

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

...