在Gprbuild中编译C的Shell命令

在Gprbuild中编译C的Shell命令,c,ada,gprbuild,C,Ada,Gprbuild,使用GtkAda,我试图使用资源API将Glade文件直接包含在代码中 为此,我们可以从一组资源中生成C代码,使用这些资源可以链接到Ada代码 问题是,这段C代码需要Gtk include,我们通常从Linux下的pkg config命令获得它,例如 gcc-c-xc`pkg config-cflags gio-2.0`myglade.gresource.c 我想知道如何在GPRBuild项目文件中提供相同类型的信息 仅供参考,我已经尝试在C语言的编译器包中使用pkg config命令,但没有成

使用GtkAda,我试图使用资源API将Glade文件直接包含在代码中

为此,我们可以从一组资源中生成C代码,使用这些资源可以链接到Ada代码

问题是,这段C代码需要Gtk include,我们通常从Linux下的pkg config命令获得它,例如

gcc-c-xc`pkg config-cflags gio-2.0`myglade.gresource.c 我想知道如何在GPRBuild项目文件中提供相同类型的信息


仅供参考,我已经尝试在C语言的编译器包中使用pkg config命令,但没有成功。当然,我设法手动构建,但这有点长:

您最好的选择是做GtkAda所做的事情:查看它的文件,它使用标记@GTK_LIBS_GPR@将被配置脚本替换,提供可用的shared.GPR

问题是,您需要发出pkg config调用,并以某种方式根据结果构建您的gpr文件。GPRBuild无法为您执行此操作并处理结果。如果您对GNU自动工具感到满意,您可以进一步了解GtkAda是如何实现的:

GTK_LIBS_GPR是使用将C样式标志转换为GPR数组的宏设置的。该值来自通过pkg config查询的GTK_LIBS


如果您不习惯使用GNU自动工具,您可以使用基本的shell commandos(一种类似Python的脚本语言)或任何其他您喜欢的工具来编写配置脚本

你的最佳选择将是做GtkAda所做的事情:看看它的文件,它使用标记@GTK_LIBS_GPR@,该标记将被configure脚本替换,提供一个可用的shared.GPR

问题是,您需要发出pkg config调用,并以某种方式根据结果构建您的gpr文件。GPRBuild无法为您执行此操作并处理结果。如果您对GNU自动工具感到满意,您可以进一步了解GtkAda是如何实现的:

GTK_LIBS_GPR是使用将C样式标志转换为GPR数组的宏设置的。该值来自通过pkg config查询的GTK_LIBS


如果您不习惯使用GNU自动工具,您可以使用基本的shell commandos(一种类似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`"

这可能适合您:

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配置数据库提供一个特殊的添加,该数据库将使用该功能,该功能运行一个外部命令;但它只在元素中是合法的,为此引入一个新的编译器似乎。。。错误的另外,不确定如何以列表形式获取结果-它用于查询编译器,例如-dumpmachine。您的第一个解决方案正在工作!。。。我同意你的观点,在GPR配置数据库中提供一个特殊的编译器描述,这在我看来是非常错误的,因为这不是它的主要目的。我想知道你是否可以在GPR配置数据库中提供一个特殊的附加项,它将使用这个功能,运行一个外部命令;但它只在元素中是合法的,为此引入一个新的编译器似乎。。。错误的另外,不确定如何以列表形式获取结果-它用于查询编译器,例如-dumpmachine。您的第一个解决方案正在工作!。。。我同意你的观点,在GPR配置数据库中提供一个特殊的编译器描述,在我看来这是非常错误的,因为这不是它的主要目的。