0

我在 Visual Studio 16.8.3 (Enterprise 2019) 中有一个解决方案。解决方案的项目具有取决于环境变量值的设置OPTIMIZE。类似于以下内容(省略其他设置):

<ItemDefinitionGroup Condition="'$(OPTIMIZE)' == 'TRUE'">
  <ClCompile>
    <WholeProgramOptimization>true</WholeProgramOptimization>
  </ClCompile>
</ItemDefinitionGroup>
...
<ItemDefinitionGroup Condition="'$(OPTIMIZE)' != 'TRUE'">
  <ClCompile>
    <WholeProgramOptimization>false</WholeProgramOptimization>
  </ClCompile>
</ItemDefinitionGroup> 

我设置OPTMIZE=TRUE并构建解决方案。然后我关闭VS,设置OPTIMIZE=FALSE,打开VS。现在我期待整个解决方案将被重建,因为每个 cpp 的文件编译设置都发生了变化。但是当我按下 时Build Solution,什么也没有发生。当我在解决方案资源管理器中右键单击该项目并按Build时,什么也没有发生。

但是,当我在任何项目中选择任何 cpp 文件并对其进行编译时,该项目会以某种方式理解其所有 cpp 文件的设置都已更改。现在,如果我在解决方案资源管理器中右键单击该项目,然后按Build,则将重建整个项目。

我希望项目了解当我更改环境变量的值时设置已更改。我怎样才能实现这种行为?

PS当然,Rebuild Solution如果我知道设置已更改,我可以使用。但是我不想记住OPTIMIZE变量的值自上次构建以来是否发生了变化。Build Solution如果没有更改,我只想按一下并进行一个小的增量构建,如果设置更改,则进行完整的重建。

4

1 回答 1

1

VS IDE 无法检测到我身边的微小变化,我遇到了与您描述的相同的行为。在我看来,msbuild 将检测资源文件与输出文件相比的更改或修改,然后如果输出文件较新,它将构建。

因此,由于您的函数不会向vcxproj文件添加任何新信息,只是一些逻辑处理,不会在vcxproj文件中添加任何更多节点。

但是,我发现 msbuild 命令行可以实现您的需求。

所以我想知道up-to-dateVS IDE 是否有一些无法检测到更改设置的问题

并且还有最新的机制:</p>

在此处输入图像描述

您更改OPTIMIZEenv 变量时,在我这边,我将其从 更改FALSETRUE,保存它,重新启动 VS 的开发人员命令提示符,然后键入:msbuild xxx\xxx.vcxproj -t:build并会发现它会根据更改的属性设置构建您的项目。

在此处输入图像描述

GL是。WholeProgramOptimization_true

并且新的输出文件是在构建时生成的,这意味着它会进行构建。

此外,您还可以从 msbuild 命令行创建构建过程的 bat 文件。双击 bat 后,它将执行构建。

更新

到目前为止, VS IDE无法做到这一点。我很抱歉告诉你。我已经向我们的 DC 团队报告了这个问题,如果我没有详细描述这个问题,你可以检查它、投票并添加任何评论。并且会得到更多微软的关注。

到目前为止,您必须使用 msbuild 命令行才能获得所需的内容。

于 2021-03-05T07:45:45.627 回答