如何使用 .gpr 项目文件和 gprbuild 进行交叉编译?

Lya*_*aaa 2 compilation ada cross-compiling gnat gprbuild

我正在尝试从 Linux ( Fedora 29 )交叉编译一个以 Windows 为目标的 Ada 程序。我对编译一无所知,Gnat 项目经理文档无法帮助我这个菜鸟。我更喜欢在项目文件中使用开关,并使命令尽可能简单。我该怎么办?

我试过gprbuild -P logfilter.gpr --target=Windows导致

Error: no compiler found for language 'c', target = Windows, default runtime
Error: no compiler found for language 'ada', target = Windows, default runtime
logfilter.gpr:3:09: warning: no compiler specified for language "Ada", ignoring all its sources
logfilter.gpr:7:19: "log_filter_main.adb" is not a source of project "logfilter"
gprbuild: problems with main sources

Run Code Online (Sandbox Code Playgroud)

这是我的gprconfig

prconfig has found the following compilers on your PATH.
  Only those matching the target and the selected compilers are displayed.
   1. GNAT for Ada in /usr/bin/ version 8.3 (default runtime)
   2. GCC-ASM for Asm in /usr/bin/ version 8.3.1
   3. GCC-ASM for Asm2 in /usr/bin/ version 8.3.1
   4. GCC-ASM for Asm_Cpp in /usr/bin/ version 8.3.1
   5. LLVM for C in /usr/bin/ version 7.0.1
   6. GCC for C in /usr/bin/ version 8.3.1
   7. G++ for C++ in /usr/bin/ version 8.3.1
Run Code Online (Sandbox Code Playgroud)

和我的gprconfig --show-targets

List of targets supported by a compiler:
x86_64-redhat-linux
x86_64-unknown-linux-gnu
Run Code Online (Sandbox Code Playgroud)

这是我的file.gpr

with "../../lib/gnat/gtkada";

project LogFilter is
    for Source_Dirs use ("src");
    for Object_Dir  use "obj";
    for Exec_Dir    use "exec";
    for Main use ("log_filter_main.adb");

   package Builder is
      for Executable ("main.adb") use "Logs_Filter";
   end Builder;

   package Compiler is
      for Switches ("ada") use ("-gnat2012");
   end Compiler;

end Logfilter;
Run Code Online (Sandbox Code Playgroud)

Max*_*nik 5

有一次我用 Fedora 24 做到了这一点。但这需要构建一个交叉编译器。我还有一个docker 镜像

Fedora 软件包的补丁

我在 Fedora 上填写了一个请求,要求在交叉编译器的 Windows 中包含 ada,但他们关闭了它。但是,我无法找到错误编号。

告诉我您是否对此的新版本或使用说明感兴趣。

更新:我为 FC29 重建了十字架。你可以这样试试:

dnf copr enable reznik/ada
dnf install mingw64-gcc-gnat
dnf install gprbuild

sed -i -e 's/-pc-mingw/-w64-mingw/g' /usr/share/gprconfig/*

cat > hello.adb << EOF
with Ada.Text_IO;
procedure Hello is
begin
   Ada.Text_IO.Put_Line ("Hello");
end Hello;
EOF

cat > hello.gpr << EOF
project Hello is
   for Main use ("hello.adb");
end Hello;
EOF
gprbuild --target=x86_64-w64-mingw32 -P hello.gpr
file hello.exe

hello.exe: PE32+ executable (console) x86-64, for MS Windows
Run Code Online (Sandbox Code Playgroud)

PS:链接到copr