是否可以在 gprbuild 项目文件中使用文件通配符?
Is it possible to have a file wildcard in gprbuild project files?
我有一个项目,我经常在某个目录中创建很多新的主入口点 *.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 文件都应该被视为一个主文件。
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 来提供 src/examples
中的所有 *.adb
文件(使用 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
.
我有一个项目,我经常在某个目录中创建很多新的主入口点 *.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 文件都应该被视为一个主文件。
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 来提供 src/examples
中的所有 *.adb
文件(使用 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
.