【问题标题】:Can gprbuild be configured to output gnatprep preprocessed sources?可以将 gprbuild 配置为输出 gnatprep 预处理源吗?
【发布时间】:2021-03-20 13:06:38
【问题描述】:

我有一个 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';

【问题讨论】:

    标签: ada gprbuild


    【解决方案1】:

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

       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;
    

    【讨论】:

    • 我还想通过 gnatprep -c 将删除的部分保留为 cmets。但是-gnatec-gnateC 不起作用;有没有办法从 gpr 文件中传递 gnatprep 标志?
    • 谢谢,这行得通。请注意,也可以将-gnateDFoo=Bar 保留在 gpr 文件中,在 prep.def 中只有 -c 选项
    猜你喜欢
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多