【问题标题】:Folder structure to handle projects shared libs in Delphi/Lazarus在 Delphi/Lazarus 中处理项目共享库的文件夹结构
【发布时间】:2018-10-24 08:35:46
【问题描述】:

我的项目共享许多公共库,有时一个项目应该使用不同版本的代码库。我修补了一些库以纠正错误。

如何组织文件夹结构以使初始项目设置更容易?

【问题讨论】:

  • 这是关于 Delphi 还是关于 FreePascal 的问题?标签上写着 Lazarus 和 FreePascal,但你提到了 Delphi。是哪个?
  • @RudyVelthuis 我已经更新了标题和答案。现在它描述了两者。

标签: delphi environment-variables lazarus freepascal


【解决方案1】:

保留代码库

要共享代码库,我们应该使用共享代码库,例如VCS 存储库或只是一个共享文件夹。 为了更好地导航创建一个树结构,使用像这样的路径lib-name\lib-name-version。版本可以是版本号、版本名称、VCS 变更集 ID 或任何其他字符串以指示 lib 版本。如果您想添加已修补或采用的库名称版本,例如 lib-name-version-private,并添加 PatchInfo.txt 描述您对其他开发人员所做的更改。您还可以为没有源代码的库保留已编译的库 DCU 文件。

示例库结构:

+ superobject
|  |- superobject-1.1
|  +- superobject-1.2
+ synapse
|  |- synapse-1.0
|  |- synapse-r209
|  +- synapse-r209-private
+indy
   |- indy-9.0
   +- indy-10.0.0.52

访问库/库路径

要允许任何开发人员将库保存在他想要的任何地方,请使用 OS Environment Vars。项目选项或 IDE 库路径中的 Delphi IDE/Lazarus IDE 可以在构建期间将 $(env-var-name) 宏替换为 env var 值。 创建一个环境变量PascalCommonLibs=D:\PascalCommonLibs,指定一个指向您的库存储库根目录的路径,然后将您想要的库添加到库路径。

Delphi 的库路径示例:

$(PascalCommonLibs)\superobject\superobject-1.2
$(PascalCommonLibs)\synapse\synapse-r209-private

Lazarus 的库路径示例:

$Env(PascalCommonLibs)\superobject\superobject-1.2
$Env(PascalCommonLibs)\synapse\synapse-r209-private

现在您甚至可以创建一个默认库路径列表,每个开发人员都可以将其粘贴到 IDE 库路径中。

此方法还简化了自动构建配置,只需在脚本中使用PascalCommonLibs env var 指定库或源搜索路径。

【讨论】:

  • 不幸的是,Delphi 不能很好地处理相对路径。 (stackoverflow.com/questions/2326041/…) 这样,您的项目中仍然存在硬编码路径,如果您需要更改这些路径,例如想用旧组件构建旧版本。否则,您可以简单地检查 components/ 和 apps/ 在同一级别,并让您的所有应用程序引用 ../../components/x
  • @MarcovandeVoort 但它不是相对的 $(DelphiCommonLibs)\superobject\superobject-1.2 将被评估为绝对路径 D:\DelphiCommonLibs\superobject\superobject-1.2。
  • 是的,这是我想避免的限制 :-)
  • @MarcovandeVoort 实际上,正如我所见,这是设置路径非常便宜的唯一方法,避免了相对路径的问题。你用什么硬编码路径?
  • 硬编码路径是我必须为两个不同的结帐更改配置。其中包括 subst 技巧或环境变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 2013-09-12
  • 1970-01-01
  • 2023-03-07
  • 2015-12-05
相关资源
最近更新 更多