【发布时间】:2017-06-26 00:31:57
【问题描述】:
例如,我们有 2 个项目组 - ProjectGroupA.bpg и ProjectGroupB.bpg。每组由 EXE 和 BPL 模块组成。
在每个项目组中都有相同的项目Project1.bpl、Project2.bpl、Project3.bpl和不同的项目appA.exe、Project5.bpl和appB.exe、Project6.bpl,像这样:ProjectGroupA.bpg(项目exeA -1-2-3-5) 和 ProjectGroupB.bpg(项目 exeB-1-2-3-6)。
在相同的项目(1、2、3)中,应用程序 A 和 B 的功能存在细微差别,最好通过使用条件定义来解决(例如,在 bpl 或使用部分中包含某些行)。
问题是 - 如何为项目组设置编译器定义,以便在构建应用程序 A 时,其中的所有模块都会有指令 DEFINE_PROJECT_A,而在构建应用程序 B 时 - 指令 DEFINE_PROJECT_B ?
如果无法做到这一点,在项目组中进行条件编译的可能解决方法是什么?使用场景是能够在开发者机器上更改一些代码,按 F9 并立即看到正在运行的应用程序。
【问题讨论】:
-
无法使用 IDE 并且没有明显的解决方法。使用命令行编译来定义不同的条件来处理这个问题。
-
@DavidHeffernan 上次我检查时,cmd 编译在 D7 中运行不佳(抱歉,我不记得 atm 的具体细节,关于路径 iirc 的一些东西?)。现在我正在考虑在每个项目中包含一个 ver.bpl 模块,名称相同但放置在不同的路径上(
app_a\ver.bpl和app_b\ver.bpl)。然后每个 bpl 可以有ver.pas文件,该文件可以包含const my_version = 'A'或 `='B'` 并将其包含到每个需要它的项目/模块中。然后我可以写{$if my_version = 'A'} ... -
命令行编译工作正常。你只需要做对。你在这里设置了一个复杂的设置。坦率地说,尝试从 IDE 构建是愚蠢的。是时候面对这一点了。
-
@DavidHeffernan 从 IDE 构建是开发过程的一部分。例如。当我更改一些代码时,我想按 F9 并尽快查看应用程序,而不是重建整个项目组。当然可以按照您建议的方式配置构建服务器,但是上次我花了很多时间并通过 cmd 来完成它。我们现在使用其他方法(FinalBuilder iirc)。
-
FinalBuilder 调用命令行编译器。他们显然可以让它发挥作用。为了您的开发需求,您必须在每个项目中定义条件。
标签: delphi delphi-7 conditional-compilation