我有一个 gpr 项目,它使用 gnatprep 来预处理源文件。但现在我有一个工具需要已经预处理的源文件。我知道我可以找到每个源文件并通过 gnatprep 运行它:
find . -type f -iname '*.ad[sb]' -exec gnatprep -DSymbol=value {} {}.prep \;
Run Code Online (Sandbox Code Playgroud)
但我想利用项目文件来找到正确的源文件并传递它们。我的项目文件还定义了要使用的各种符号值,我必须将其添加到上面的命令中。是否可以通过 .gpr 文件中的某些参数?例如
for Object_Dir use 'obj';
for Preprocessed_Sources_Dir use 'wow_that_was_easy';
Run Code Online (Sandbox Code Playgroud)
您可以告诉编译器将预处理后的源保留在Object_Dirwith-gnateG选项中,如下所示,在项目文件中:
package Compiler is
for Default_Switches ("Ada") use ("-gnateDFoo=""Bar""", "-gnateG" );
end Compiler;
Run Code Online (Sandbox Code Playgroud)
预处理后的源代码将被命名<original_filename>.prep,例如foo.adb->foo.adb.prep
编辑:
对于您的后续问题,您必须将预处理器选项放在单独的文件中,例如prep.def:
* -u -c -DFoo="Bar"
Run Code Online (Sandbox Code Playgroud)
或者,如果您想指定每个文件的选项:
"foo.adb" -u -c -DFoo="Bar"
Run Code Online (Sandbox Code Playgroud)
然后告诉编译器使用该文件和选项gnatep=:
package Compiler is
for Default_Switches ("Ada") use ("-gnateG", "-gnatep=" & Foo'Project_Dir & "prep.def" );
end Compiler;
Run Code Online (Sandbox Code Playgroud)