我有几个可执行文件,我希望能够使用相同的库。构建后,我希望树看起来像这样(简化的示例):
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 来生成库并将其放置在两个目标目录中?
共享库应该保留在Lib1中。如 GNAT 项目经理所述:2.3.1。导入项目,您可以在每个程序的.gpr
文件上使用
相对路径来引用共享库。从理论上讲,
Prog1.gpr:
with "../Lib1/libLib1";
project Prog1 is
…
Prog2.gpr:
with "../Lib1/libLib1";
project Prog2 is
…