gprbuild:多个项目之间的共享库

问题描述 投票:0回答:1

我有几个可执行文件,我希望能够使用相同的库。构建后,我希望树看起来像这样(简化的示例):

Root
|--Prog1
|  |--src
|  |--obj
|  |--Prog1.gpr
|  |--Prog1.exe
|  |--libLib1.dll
|
|--Prog2
|  |--src
|  |--obj
|  |--Prog2.gpr
|  |--Prog2.exe
|  |--libLib1.dll
|
|--Lib1
   |--src
   |--obj
   |--Lib1.gpr

如果我将其放入 Lib1.gpr,它只会将 libLib1.dll 放入 Prog1:

for Library_Dir use "../Prog1";

这不是我想要的,因为那样 Prog2 将无法使用它。

如果我通过--relocate-build-tree=。在命令行,它将移动整个构建树,这也不是我想要的(它还抱怨无法重新定位到比对象目录更深的位置)。

我尝试只为两者之一指定 Library_Dir ,并在运行 gpr 之前进行哑文件复制以将其复制到另一个,这起初有效,但随着整个项目变得更加复杂,它变得难以处理。我考虑过尝试参数化“for Library_Dir”,但我不相信这不会导致仅更新一个位置(毕竟,源在两个版本之间不会改变)。

为什么不把它留在 Lib1 中并让每个人引用保存的副本呢?出于二进制分发的原因,某些二进制文件是开发支持工具,不适合分发,而其他二进制文件则是单独的项目,应单独分发。

有没有一种方法可以配置 gprbuild 来生成库并将其放置在两个目标目录中?

shared-libraries ada gprbuild
1个回答
0
投票

共享库应该保留在Lib1中。如 GNAT 项目经理所述:2.3.1。导入项目,您可以在每个程序的.gpr文件上使用

相对
路径来引用共享库。从理论上讲,

Prog1.gpr

with "../Lib1/libLib1";
project Prog1 is
…

Prog2.gpr

with "../Lib1/libLib1";
project Prog2 is
…
© www.soinside.com 2019 - 2024. All rights reserved.