源目录在.gpr脚本中不起作用

时间:2012-10-25 17:21:31

标签: ada gnat

我继承了一个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的设置方式以及我们如何在两个项目之间共享代码,我更愿意弄清楚我使用“for source_dirs”的方式有什么问题,而不是保留所有ada的多个副本文件。

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

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

1 个答案:

答案 0 :(得分: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;