1

我继承了一个 Ada/C++ 项目,我正在尝试使用 gprbuild 来自动化构建过程(之前是使用一组大约 12 个 .bat 文件完成的)。我对 Ada 和 gprbuild 完全陌生,但实际上取得了不错的进展。我可以编译我需要的 .exe,但不能编译库。我无权完全共享 .gpr 文件,但相关部分如下所示:

[snip]
for Source_Dirs use (
                    "c_plus_plus_files",
                    "ada_files",
                    "..\another_project\some_other_ada_files",
                    "..\another_project\even_more_ada_files"
                    );
[snip]
for Source_Files use (
   "my_ada_file.ads",                       
   "another_ada_file.ads",                      
   "one_more_ada_file.adb", 
   "c_plus_plus_file.cpp"
    );
[snip]  

当我运行“gprbuild -P my_project.gpr”时,它又运行“gcc -c gnat5 one_more_ada_file.adb”并抱怨它找不到 one_more_ada_file.adb 依赖的某个文件。依赖项在 ..\another_project\even_more_ada_files 中,所以我希望能找到它。但是,如果我将依赖项复制到与 one_more_ada_file.adb 相同的文件夹中,错误就会消失。

由于 VCS 的设置方式以及我们如何在两个项目之间共享代码,我宁愿弄清楚我使用“供 source_dirs 使用”的方式有什么问题,而不是保留所有 ada 文件的多个副本。

同样,我是 Ada/GPS 新手,所以如果我遗漏了相关信息,请告诉我。

更新:似乎具体问题不是 source_dirs 根本没有做任何事情,而是它不能处理两个源目录,其中一个目录中的 .ads 文件依赖于另一个目录中的 .ads 文件。也就是说,即使在我上面的“其他”项目中,some_other_ada_files 中依赖于 even_more_ada_files 中的 .ads 文件的 .ads 文件在我运行 gprbuild 时也不会使用 gcc -c -gnat05 命令编译(错误: even_more_ada_files 未找到),但如果我手动(或在 .bat 脚本中)运行 gcc 命令,并带有两个 -I 标志,每个目录一个标志,它确实会被编译。

4

1 回答 1

2

在处理多个项目时,您通常应该为每个项目创建一个 .gpr 文件,并根据需要让您的项目依赖于其他项目。

因此:

project another_project is
   for Source_Dirs use
      ("some_other_ada_files",
       "even_more_ada_files");
end another_project;

接着:

with "..\another_project\another_project.gpr"

project The_Project is
   for Source_Dirs use 
      ("c_plus_plus_files",
       "ada_files");
end The_Project;
于 2012-10-25T18:38:50.040 回答