我继承了一个 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 标志,每个目录一个标志,它确实会被编译。