解决Creating "...unsuccessfulbuild" because "AlwaysCreate" was specified.

本文介绍了解决Visual C++编译时出现大量“所有输出都是最新的”提示的方法。通过排查工程配置,发现是因为ReadMe.txt文件被误删导致。文章提供了具体的解决步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每次编译或者调试运行的时候都会出现下面的语句:

(虽然不是什么错误,总是让人很闹心,尤其是有错误或警告条目的时候,还要往上翻半天才能找到。)


1>Build started 2013/2/25 16:01:03.

1>InitializeBuildStatus:
1> Creating "x64\Debug\xx.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>ClCompile:
1> All outputs are up-to-date.
1> All outputs are up-to-date.
1>ResourceCompile:
1> All outputs are up-to-date.
1>ManifestResourceCompile:
1> All outputs are up-to-date.
1>Link:
1> All outputs are up-to-date.
1> xx.vcxproj -> D:\VisonExpert\IUnit\x64\Debug\xx.dll
1>Manifest:
1> All outputs are up-to-date.
1> All outputs are up-to-date.
1>BscMake:
1> All outputs are up-to-date.
1>FinalizeBuildStatus:
1> Deleting file "x64\Debug\xx.unsuccessfulbuild".
1> Touching "x64\Debug\xx.lastbuildstate".
1>
1>Build succeeded.
1>

1>Time Elapsed 00:00:00.03


=============================================================================================================

根据意思,好像是工程指定了“AlwaysCreate”,但是翻遍了所有工程配置,也没有找到指定“AlwaysCreate”的地方。

无论如何,还是工程的配置出了问题,仔细查看,发现了问题,在此做一下记录。

工程中有一句:<CustomBuild Include="ReadMe.txt" />

也就是说该工程包含ReadMe.txt,但是在硬盘中,不小心把这个文件删掉了。

因为这个文件是该工程的一部分,编译的时候,VC更新检查机制发现该文件不存在,认为该工程更新了,于是重新编译。重新编译的时候,但是所有资源文件、cpp文件等都是最新的,于是就出现了:“All outputs are up-to-date.”

找到原因后,解决问题水到渠成。


总结:

1、用vc打开工程

2、逐个双击左列Solution Explorer中的文件列表,如果有文件不存在,就会有一个警告对话框弹出:


3、工程中移除该文件或者硬盘中添加该文件即可!





Configuring incomplete, errors occurred! See also "D:/Program Files (x86)/opencv/build/x86/CMakeFiles/CMakeOutput.log".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”(默认目标)的操作。 分析错误原因并解决
最新发布
03-27
<think>好的,我现在需要帮助用户解决在Windows 10上使用VS2012配置OpenCV时遇到的CMake配置错误。用户提到错误信息是“C++ compiler identification build process failed”,并建议检查CMakeOutput日志。首先,我需要分析可能的原因。 首先,CMake配置错误通常与编译器无法识别有关。用户使用的是VS2012,这可能存在兼容性问题,尤其是考虑到OpenCV新版本可能不再支持较旧的编译器。例如,OpenCV 4.x可能要求至少VS2015或更高版本,所以用户可能需要确认他们使用的OpenCV版本是否支持VS2012[^1]。 接下来,检查C++编译器是否正确安装。用户需要确保Visual Studio 2012的C++组件已完整安装,包括所有必要的工具链和SDK。有时候,安装时可能漏掉某些组件,导致CMake无法找到编译器。 然后,CMake生成器选择是否正确。在运行CMake时,必须指定正确的生成器,例如“Visual Studio 11 2012”。如果用户使用的是64位系统,还需要指定架构参数,如“-A Win32”或“-A x64”,这取决于目标平台[^1]。 环境变量也是一个可能的问题点。用户需要确保VS2012的相关路径(如VC目录)已添加到系统环境变量中。如果路径缺失,CMake将无法定位编译器。 查看日志文件是关键步骤。用户应检查CMakeOutput.log和CMakeError.log,通常在构建目录中。这些日志会详细记录配置过程中发生的问题,比如编译器测试失败的具体原因,帮助进一步诊断问题。 此外,第三方依赖项可能缺失。例如,某些OpenCV模块需要额外的库或工具,如FFmpeg或Python支持,如果未正确安装,可能导致配置失败。用户需要确保所有依赖项已正确安装并配置路径[^2][^3]。 最后,建议用户尝试使用CMake GUI工具,以图形界面方式逐步配置,更直观地查看错误和选项。同时,可以尝试清理构建目录,重新运行CMake,避免缓存导致的配置错误。 总结下来,可能的解决步骤包括:确认OpenCV版本兼容性,检查编译器安装,正确指定CMake生成器,设置环境变量,检查日志文件,安装依赖项,使用CMake GUI等。需要逐步排查每个可能性,找到具体原因。</think>### 解决OpenCV CMake配置错误的步骤 #### 1. **检查OpenCV版本与VS2012的兼容性** - OpenCV 3.x及更高版本可能不再支持VS2012,建议使用**OpenCV 2.4.x版本**(例如2.4.13),因为该版本兼容旧版编译器[^2]。 - 若必须使用新版OpenCV,需升级到VS2015或更高版本。 #### 2. **确认C++编译器安装完整** - 在Visual Studio 2012安装中,勾选**C++编译工具链**(包括MSBuild、Windows SDK等)。 - 运行`vcvarsall.bat`(位于`%VS2012安装路径%\VC\bin`)初始化环境变量。 #### 3. **指定正确的CMake生成器** - 在CMake命令行中添加生成器参数: ```bash cmake -G "Visual Studio 11 2012" -A Win32 .. ``` - 若需64位构建,替换为: ```bash cmake -G "Visual Studio 11 2012 Win64" .. ``` #### 4. **检查环境变量** - 确保以下路径已添加到系统环境变量: ```bash %VS2012安装路径%\VC\bin %Windows SDK路径%\bin ``` - 重启命令行工具使环境变量生效。 #### 5. **分析CMake日志** - 打开`CMakeOutput.log`和`CMakeError.log`,搜索关键字`error`或`failed`。 - 常见问题: - **编译器测试失败**:日志中可能显示`cl.exe无法识别C++11特性`,需降低CMake的C++标准要求。 - **缺失Windows SDK**:需重新安装SDK 7.1或8.0。 #### 6. **手动配置CMake参数** - 禁用不必要的模块以减少依赖: ```bash cmake -D BUILD_opencv_python=OFF -D WITH_FFMPEG=OFF .. ``` - 若需要Python支持,确保Python路径正确[^4]。 #### 7. **尝试替代构建方法** - 使用预编译的OpenCV库(如官方提供的Windows包)跳过编译步骤。 - 参考OpenCV社区提供的VS2012兼容补丁或脚本。 --- ### 相关问题 1. **如何查看CMake生成的详细编译日志?** - 在构建目录中找到`CMakeOutput.log`和`CMakeError.log`,使用文本编辑器打开分析具体错误。 2. **OpenCV 2.4.x在Windows 10上是否稳定?** - 是的,但需确保安装KB2973337补丁以解决Windows 10的路径兼容性问题。 3. **如何为旧版Visual Studio安装兼容的Windows SDK?** - 从Microsoft Archive下载SDK 7.1或8.0,手动集成到VS2012。 --- ### 引用 [^1]: 编译OpenCV静态库时需通过脚本配置路径,如`../opencv_cmake.sh Device ../OpenCV-2.2.0`,确保生成器与编译器匹配。 : CMake的Python检测可能失败,需手动指定路径或禁用相关模块。 [^3]: 运行时若出现GStreamer错误,可能因缺少动态链接库,建议编译时禁用视频IO模块。 : 模型转换时需注意配置文件(如`prototxt`)与OpenCV版本的兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值