我有一个复杂的项目组,在树中配置了大约10个“最终”构建配置,其中每个节点都有自己的选项集。像这样:
所以,所有base,Release,Release Generic X,Release Final Y都有自己的选项集保存在文件中并作为参考添加。所以你会有
这些选项集之间的主要区别是各种编译器定义启用/禁用在上面提到的树中组织的某些功能(因此构建目标和选项集)以及显然包含所需内容的搜索路径。 因此,每个选项集还包含依赖于相应构建配置的不同搜索路径。 项目组中有超过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个选项集文件
答案 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