微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

gprbuild 项目文件中是否可以有文件通配符?

如何解决gprbuild 项目文件中是否可以有文件通配符?

我有一个项目,我经常在其中的某个目录中创建许多新的主入口点 *.adb 文件。有什么方法可以使用 gprbuild 设置我的项目,以便添加新的主程序不需要编辑 .gpr 项目文件

目前,我有这个,每次添加新电源时都需要修改电源列表:

project Adabots is

   for Source_Dirs use ("src","src/examples");
   
   for Main use ("build_wall.adb","remove_wall.adb","get_stone.adb","staircase_down.adb","josephine.adb","dig_cavern.adb","build_maze.adb","elevator.adb","lovelace.adb","dig_hallway.adb","spiral_staircase.adb","walk_up_stairs.adb");

但我想做的只是说 src/examples 中的每个 .adb 文件都应该被视为主文件

The full project is here,in case that helps.

解决方法

GPRBuild 项目文件的程序功能非常有限。您可以创建并附加到字符串,也可以创建并附加到列表,仅此而已。

但是,您可以通过提供文件名作为场景变量来执行您想要的操作:

   Main_Names := external_as_list ("executables",",");
   for Main use Main_Names;

通过使用 external_as_list,您可以在命令行上提供所有可执行文件的名称,以逗号分隔:

gprbuild adabots.gpr -Xexecutables=build_wall.adb,remove_wall.adb,get_stone.adb

现在您可以使用 shell globbing 来提供 *.adb 中的所有 src/examples 文件(使用 basename 去除 src/examples/ 路径;然后使用 tr 连接带逗号的名称):

gprbuild adabots.gpr -Xexecutables=$(echo src/examples/*.adb | xargs -n 1 basename | tr '\n',)

这可以放在 Makefile 中,如下所示:

MAIN_SOURCES=$(shell echo src/*.adb | xargs -n 1 basename | tr '\n',)

all:
    gprbuild -Xexecutables=$(MAIN_SOURCES)

%: src/%.adb
    gprbuild -Xexecutables=$^

另请注意,如果您的项目使用 alire,则将上面的 gprbuild 替换为 alr build 也有效。

对于构建单独的主程序,您可以执行例如make foo 构建 src/foo.adb

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。