ada - 可以将 gprbuild 配置为输出 gnatprep 预处理源吗?

标签 ada gprbuild

我有一个 gpr 项目,它使用 gnatprep 来预处理源文件。但是现在我有一个工具需要已经预处理过的源文件。我知道我可以找到每个源文件并通过 gnatprep 运行它:

find . -type f -iname '*.ad[sb]' -exec gnatprep -DSymbol=value {} {}.prep \;

但我想利用项目文件找到正确的源文件并传递它们。我的项目文件还定义了要使用的各种符号值,我必须将其添加到上面的命令中。是否可以通过 .gpr 文件中的某些参数?例如

   for Object_Dir use 'obj';
   for Preprocessed_Sources_Dir use 'wow_that_was_easy';

最佳答案

您可以告诉编译器将预处理后的源代码保留在 Object_Dir 中与 -gnateG选项,像这样,在项目文件中:

   package Compiler is
      for Default_Switches ("Ada") use ("-gnateDFoo=""Bar""", "-gnateG" );
   end Compiler;

预处理后的源将被命名为<original_filename>.prep ,例如 foo.adb -> foo.adb.prep

编辑:

对于您的后续问题,您必须将预处理器选项放在单独的文件中,例如 prep.def :

* -u -c -DFoo="Bar"

或者,如果您想为每个文件指定选项:

"foo.adb" -u -c -DFoo="Bar"

然后告诉编译器将该文件与 gnatep= 一起使用选项:

package Compiler is
   for Default_Switches ("Ada") use ("-gnateG", "-gnatep=" & Foo'Project_Dir & "prep.def" );
end Compiler;

关于ada - 可以将 gprbuild 配置为输出 gnatprep 预处理源吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65211998/

相关文章:

exception - 显式引发异常的应用

ada - 使用原始操作创建对象

gnat - 在 Adacore 的 GPR 文件中,如何设置编译器包含 C++ 的搜索路径

c - 在 Gprbuild 中编译 C 的 Shell 命令

rename - 如何重命名 protected 对象条目

alignment - Ada 中的 Alignment 子句有什么作用?

type-conversion - 在 Ada 中,将 64 位 float 分配给 16 位整数时代码失败怎么可能?

cuda - 如何将 nvcc 与 gprbuild 一起使用?

linker - GPRbuild:编译器开关被传递给链接器