gpt4 book ai didi

Ada Gnat 项目,其中包含针对不同构建配置的不同名称的文件

转载 作者:行者123 更新时间:2023-12-05 08:15:11 24 4
gpt4 key购买 nike

我有一个包含多个构建配置的 Gnat/Gprbuild 项目。我有一个主要源文件和一个辅助广告文件,其中主要源文件包括:

with Secondary_File; use Secondary_File;

问题是在每个配置中,辅助文件都有不同的名称。例如,一个配置可能称为 Secondary_File_1.ads,另一个配置可能称为 Secondary_File_2.ads。这使得无法使用上面的 with 语句。

在 C 中,我会这样做:

#ifdef BUILD_CFG_1
#include "secondary_file_1.h"
#else
#include "secondary_file_2.h"
#endif

在 ADA 中,有没有一种聪明的方法可以使用 Gprbuild 系统来做这样的事情?

最佳答案

许多纯粹主义者拒绝预处理的想法,but it’s possible using GNAT .

您可以通过编写源代码将其包含在基于 GPR 的构建环境中,例如main.adb,像这样:

with Secondary_File_$NUMBER;
procedure Main is
begin
null;
end Main;

(观察 $NUMBER)和项目文件如下:

project Prj is

for Main use ("main.adb");

-- Configurations
type Config_Type is ("config_1", "config_2");
-- Which one? (default is "config_1")
Config : Config_Type := external ("CONFIG", "config_1");

package Compiler is
case Config is
when "config_1" =>
for Switches ("main.adb") use ("-gnateDNUMBER=1");
when "config_2" =>
for Switches ("main.adb") use ("-gnateDNUMBER=2");
end case;
end Compiler;

end Prj;

编译给出

$ gprbuild -Pprj
Compile
[Ada] main.adb
main.adb:1:06: error: file "secondary_file_1.ads" not found
gprbuild: *** compilation phase failed

(编译寻找secondary_file_1.ads)

$ gprbuild -Pprj -XCONFIG=config_2
Compile
[Ada] main.adb
main.adb:1:06: error: file "secondary_file_2.ads" not found
gprbuild: *** compilation phase failed

(编译寻找secondary_file_2.ads)

关于Ada Gnat 项目,其中包含针对不同构建配置的不同名称的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72206798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com