关于{ 正在创建 .unsuccessfulbuild 因为已指定“AlwaysCreate” }的解决方案

本文介绍如何通过修改MSBuild配置文件来禁用构建失败的标记,避免每次构建后留下失败记录。此方法适用于追求整洁构建历史的开发者。

首先说明,这是msbuild故意的,而且无法通过配置选项更改,作用看名字就知道了,就是总是创建失败构建信息,如果是处女座为了好看一定要改,如下:

备份并修改文件

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets

具体就是将

    <WriteLinesToFile Overwrite="true" File="$(LastBuildState)" Lines="$(ProjectStateLine);$(ProjectEvaluationFingerprint)"/>
    <Touch AlwaysCreate="true" Files="$(LastBuildUnsuccessful)"/>
  </Target>

  <!-- *******************************************************************************************
        FinalizeBuildStatus target
       ******************************************************************************************* -->
  <Target Name="FinalizeBuildStatus">
    <Delete Files="$(LastBuildUnsuccessful)" Condition="Exists($(LastBuildUnsuccessful))"/>
    <Touch Files="$(LastBuildState)" Condition="Exists($(LastBuildState))"/>
  </Target>

改为

    <WriteLinesToFile Overwrite="true" File="$(LastBuildState)" Lines="$(ProjectStateLine);$(ProjectEvaluationFingerprint)"/>
    <!--<Touch AlwaysCreate="true" Files="$(LastBuildUnsuccessful)"/>-->
  </Target>

  <!-- *******************************************************************************************
        FinalizeBuildStatus target
       ******************************************************************************************* -->
  <Target Name="FinalizeBuildStatus">
    <!--<Delete Files="$(LastBuildUnsuccessful)" Condition="Exists($(LastBuildUnsuccessful))"/>
    <Touch Files="$(LastBuildState)" Condition="Exists($(LastBuildState))"/>-->
  </Target>

之后就都不见了,这些相关代码应该可以在某些特定情况下解决特定问题,注释掉以后就可能在那时产生问题,到时候再改回来。

有些地方说“<Touch AlwaysCreate="true" Files="$(LastBuildUnsuccessful)"/>use "false" to replace it.

这是不对的,因为很多时候会产生编译错误。

Touch就是“摸”一下文件,什么都不做,仅仅更新文件的最近修改时间;“AlwaysCreate”就是说摸的时候假若文件不存在就新建一个。

The system is: Windows - 10.0.22631 - AMD64 Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. Compiler: Build flags: /DWIN32;/D_WINDOWS;/W3;/GR;/EHsc Id flags: The output was: 0 Microsoft(R) 生成引擎版本 4.8.9032.0 [Microsoft .NET Framework 版本 4.0.30319.42000] 版权所有 (C) Microsoft Corporation。保留所有权利。 生成启动时间为 2025/3/26 10:49:51。 节点 1 上的项目“D:\Program Files (x86)\opencv\build\x86\CMakeFiles\3.14.1\CompilerIdCXX\CompilerIdCXX.vcxproj”(默认目标)。 PrepareForBuild: 正在创建目录“Debug\”。 InitializeBuildStatus: 正在创建“Debug\CompilerIdCXX.unsuccessfulbuild”,因为已指定AlwaysCreate”。 ClCompile: D:\VS2012\VC\bin\CL.exe /c /nologo /W0 /WX- /Od /Oy- /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Debug\\" /Fd"Debug\vc110.pdb" /Gd /TP /analyze- /errorReport:queue CMakeCXXCompilerId.cpp CMakeCXXCompilerId.cpp Link: D:\VS2012\VC\bin\link.exe /ERRORREPORT:QUEUE /OUT:".\CompilerIdCXX.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:".\CompilerIdCXX.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:".\CompilerIdCXX.lib" /MACHINE:X86 /SAFESEH Debug\CMakeCXXCompilerId.obj CompilerIdCXX.vcxproj -> D:\Program Files (x86)\opencv\build\x86\CMakeFiles\3.14.1\CompilerIdCXX\.\CompilerIdCXX.exe PostBuildEvent: for %%i in (cl.exe) do @echo CMAKE_CXX_COMPILER=%%~$PATH:i :VCEnd CMAKE_CXX_COMPILER=D:\VS2012\VC\bin\cl.exe FinalizeBuildStatus: 正在删除文件“Debug\CompilerIdCXX.unsuccessfulbuild”。 正在对“Debug\CompilerIdCXX.lastbuildstate”执行 Touch 任务。 已完成生成项目“D:\Program Files (x86)\opencv\build\x86\CMakeFiles\3.14.1\CompilerIdCXX\CompilerIdCXX.vcxproj”(默认目标)的操作。 已成功生成。 0 个警告 0 个错误 已用时间 00:00:00.33 Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "CompilerIdCXX.exe" Compilation of
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值