使用GPRBuild,我创建了一个名为Lib
的图书馆项目。 Lib
中的所有软件包都位于软件包Base
中,我将其用作基本软件包:具有基本软件包Base
。例如,如果我要在我制作的任何库或应用程序中创建软件包Apple
,它将被写为package Base.Apple
。
与此有关的问题,使用GPRBuild。为了将事物放置在Base
包下,它必须存在。因此,在GPRBuild库项目Lib
中,我有一个文件base.ads
,它表示软件包Base
的存在。然后在我正在使用库Lib
的项目中,我们将其称为Proj
,我还将所有包都放在Base
包下({{1}内的包}。为此,我们也需要为Proj
创建一个base.ads
文件,并为此包定义Proj
。
我们来看看Base
项目文件:
gpr
由此产生了问题;我们突然有两个文件,都称为with "lib.gpr";
project Proj is
-- ...
end Proj;
,都定义了base.ads
包,每个项目中都有一个文件:库项目Base
和使用库{的项目Lib
{1}}。由于我们有两个名称相同的软件包(及其文件),因此在编译时会收到此错误,这一点也不奇怪:
Proj
问题是:有没有办法在多个项目中拥有相同的基本软件包?然后通过导入(Lib
)链接在一起的项目。如果应该证明它是可能的,那么如何实现呢?
答案 0 :(得分:6)
您需要将base/
软件包放入自己的项目中。以下是最小演示。
在project Base is
end Base;
package Base is
end Base;
中,
lib/
在with "../base/base.gpr";
project Lib is
end Lib;
package Base.Lib is
end Base.Lib;
中,
proj/
在with "../lib/lib.gpr";
project Proj is
end Proj;
with Base.Lib;
package Base.Proj is
end Base.Proj;
中,
$ cd proj/
$ gprbuild
using project file proj.gpr
Compile
[Ada] base.ads
[Ada] base-lib.ads
[Ada] base-proj.ads
然后
try {
$map = new MongoCode(
'function(){
var re = new RegExp(/(.+)\.([a-zA-Z]{2,})$/);
doctype = this.value.match(re);
if(parseFloat(this.completed)>0.5){
emit(doctype[2], parseFloat(this.completed));
}
}'
);
$reduce = new MongoCode(
'function(key, values){
var sum = 0, num = 0;
for(var i in values){
if(parseFloat(values[i])>0.5){
sum += values[i];
num += 1;
}
}
return { number_of_documents : num,
sum_of_document_completions : sum,
average_completion : (sum/num) };
}'
);
$query = array (
"folder" => "work"
);
$doctypes = $db->command(
array(
'mapReduce' => 'mydocuments',
"map" => $map,
"reduce" => $reduce,
"query" => $query,
"out" => array("inline"=>1)
)
);
print_r ( $doctypes);
}
catch(MongoCursorException $e) {
echo "error message: ".$e->getMessage()."\n";
echo "error code: ".$e->getCode()."\n";
}