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");

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

完整的项目在这里,以防万一。

回答

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
gprbuild adabots.gpr -Xexecutables=build_wall.adb,remove_wall.adb,get_stone.adb

现在你可以使用通配符外壳提供所有*.adb在文件src/examples(使用basename剥除src/examples/路径,然后tr来连接名称以逗号):

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

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

all:
    gprbuild -Xexecutables=$(MAIN_SOURCES)

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

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

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


以上是gprbuild项目文件中是否可以有文件通配符?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>