Delphi XE2选项设置嵌套限制?

时间:2012-01-14 15:06:08

标签: delphi msbuild delphi-xe2

我有一个复杂的项目组,在树中配置了大约10个“最终”构建配置,其中每个节点都有自己的选项集。像这样:

  • 基地
    • 推出
      • 发布Generic 1
        • 发布决赛1
        • ...
        • 发布最终版本5
      • 发布Generic 2
        • 发布决赛6
        • ...
    • 调试
      • 与发布相同,但用于调试

所以,所有base,Release,Release Generic X,Release Final Y都有自己的选项集保存在文件中并作为参考添加。所以你会有

  • base.optset
    • Release.optset
      • 发布Generic 1.optset
        • 发布最终1.optset
        • ..

这些选项集之间的主要区别是各种编译器定义启用/禁用在上面提到的树中组织的某些功能(因此构建目标和选项集)以及显然包含所需内容的搜索路径。 因此,每个选项集还包含依赖于相应构建配置的不同搜索路径。 项目组中有超过100个项目,其中大多数项目在不同的配置级别上相互关联,因此也有一堆构建组,但这与问题无关,因为我现在正在尝试构建一次一个项目。

问题是每个选项集都在配置搜索路径。直到并包括“Release Generic 1.optset”,搜索路径被正确更新和使用。但是,“Release Final 1”和兄弟姐妹没有获得“Release Final 1.optset”引入的搜索路径。 (我知道这是因为我查看了编译器消息并检查了传递给dcc32的参数)似乎忽略了选项集。

在选项集中,所有内容都配置了“inherit = true”。

构建配置中没有任何特定内容,无处可寻。每个项目仅使用IDE中的配置和选项集文件。

这个问题/限制是否记录在任何地方/已知?有解决方法吗?除了将选项设置为值而不是通过引用。

感谢。

稍后编辑: 我决定实施一个非常难看的解决方法以便开始:基本上,将“Release Generic 1.optset”中的配置复制到每个“Release Final?.optset”中 这有一个主要的缺点,当需要向“Release Generic 1.optset”添加内容时,必须编辑传播相同修改的5个选项集文件

1 个答案:

答案 0 :(得分:1)

最后我设法找出问题所在。这实际上是Delphi IDE中的一个错误,因为它弄乱了dproj文件中的导入。

具体来说,如果一个选项集被添加一次,则不会使用其他配置的必要导入条件进行维护。

当您添加/删除配置,dproj被破坏并且不再为所有配置导入optset文件时,通常会发生这种情况。

但是一旦你的配置稳定并且你不再改变它们,dproj就会保持稳定。

我模拟了一个应用程序,以针对这些问题验证dproj文件,验证每个配置在import指令中都有其optset文件。我还没有让它自动纠正,因为我很忙。但是一旦我找到了时间,或者有更多人受到影响并需要自动修复,我会尝试发布。

在此之前,如果您注意到选项集未应用于特定配置,只需在dproj中找到配置ID(类似于Cfg_10)并查看是否可以找到

<Import Condition="'$(Cfg_10)'!='' And Exists('optset file path name')" Project="optio file path name"/>

如果没有,则将其添加到另一个<import calls

之后