我正在使用GNAT gprbuild。
我有一个项目文件 A.gpr ,项目文件 B.gpr 。
B.gpr 项目文件有可能是 A.gpr
B.gpr 的源文件 X.adb 和 X.ads 。
A.gpr 定义主文件 Y.adb ,其中包含 X.ads
要求 A.gpr 必须与 B.gpr 。
仅扩展或修改 A.gpr ,我想使用其他 X.adb 。
我该怎么做?
到目前为止,我发现的最接近的是https://gcc.gnu.org/onlinedocs/gnat_ugn/Project-Extension.html。
但是我仍然遇到错误:
unit "X" cannot belong to several projects
project "A" {overriding X.adb file path}
unit "X" already belongs to project "B"
project "B" {original x.adb filepath}
答案 0 :(得分:0)
如果文件(在这种情况下是不同的x.adb)位于不同的目录中,则可以使用case语句。 例如,在我的一些gpr文件中,我有以下几行:
type OS_Type is ("Unix", "Windows");
OS: OS_Type := external ("OS", "Unix");
case OS is
when "Unix" =>
for Source_Dirs use ("src", "src/unix");
when "Windows" =>
for Source_Dirs use ("src", "src/windows");
end case;
如您所见,根据变量使用不同的源目录。
(操作系统默认为" Unix",设置您添加的变量
-Xvariable=value
给你gprbuild调用[在这个例子中将是
-XOS=Windows
])。
答案 1 :(得分:0)
这是一个根据项目变量使用路径和正文选择的示例:
project Example is
for Object_Dir use "obj";
for Exec_Dir use ".";
type Language_Type is
("Spanish", "English");
Language : Language_Type := external ("Language", "English");
for Source_Dirs use ("src", "src/" & Language);
for Main use ("testbed.adb");
type Starts_Week_Type is
("mon", "tue", "wed", "thu", "fri", "sat", "sun");
Starts_Week : Starts_Week_Type := external ("Starts_Week", "sun");
package Ide is
for Documentation_Dir use "doc";
end Ide;
package Prove is
for Switches use ("-j4");
end Prove;
package Builder is
for Default_Switches ("ada") use ("-j4", "-C", "-g");
end Builder;
package Compiler is
for Default_Switches ("ada") use
("-gnato", "-fstack-check", "-gnatE", "-gnata", "-gnat12", "-g", "-gnatf");
end Compiler;
package Binder is
for Default_Switches ("ada") use ("-shared");
end Binder;
package Linker is
for Default_Switches ("ada") use ("-g");
end Linker;
package Naming is
for Specification("Example.Types.Week") use
"Example-types-"&Starts_Week&"_week.ada";
end Naming;
end Example;
正如您所看到的,for Source_Dirs use ("src", "src/" & Language);
行使src
和src/English
或src/Spanish
成为查找源文件时搜索/使用的目录。
稍后,在Naming中,我们有一个文件,其名称取决于被选为指定文件正文的项目变量。 - 即文件types-XXX_week.ada
,其中XXX
是Starts_Week
场景变量可能采用的三字母日缩写之一。