微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果 Visual Studio 项目的设置取决于更改的环境变量,则不会自动重建

如何解决如果 Visual Studio 项目的设置取决于更改的环境变量,则不会自动重建

我在 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,整个项目将被重建。

我想让项目明白,当我改变环境变量的值时,设置也发生了变化。我怎样才能实现这种行为?

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

解决方法

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

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

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

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

而且还有最新的机制:

enter image description here

更改 OPTIMIZE 环境变量时,在我这边,我将它从 FALSE 更改为 TRUE,保存它,重新启动 Developer Command Prompt for VS,然后键入:msbuild xxx\xxx.vcxproj -t:build 会发现它根据更改的属性设置构建您的项目。

enter image description here

GLWholeProgramOptimizationtrue

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

此外,您还可以create a bat file of the build process from msbuild command line。一旦你应该双击蝙蝠,它就会执行构建。

更新

VS IDE 到目前为止还做不到。我很抱歉这么说。如果我没有详细描述问题,我有 reported the issue to our DC Team,您可以查看、投票并添加任何评论。它将获得更多微软的关注。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。