2023年11月29日发(作者:)
VS编译CMake⽣成项⽬命令setlocal报错(errorMSB3073)
|版本声明:⼭河君,未经博主允许,禁⽌转载
项⽬场景:
使⽤CMake编译代码,⽣成VS2017项⽬,在vs2017中debug模式编译项⽬
问题描述:
debug模式编译项⽬后,直接报错
setlocal命令出错error MSB3073
setlocal命令如下:
setlocal
D:softwarecmake_3_20_0bincmake.exe -E copy_directory E:/git/TangClient_dev/dependence/runtime/ E:/git/TangClient_dev/Output/bin/win32/Debug/
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
D:softwarecmake_3_20_0bincmake.exe -E copy_directory E:/git/TangClient_dev/dependence/cef/win32/bin/Debug/ E:/git/TangClient_dev/Output/bin/win
32/Debug/
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
原因分析:
虚假原因:
从⽹上寻找解决办法,⼤多原因说是由于
GUI中CMAKE_INSTALL_PREFIX指定为C盘⽬录,导致权限不够
时,设置的build⽬录不对的原因。如在源码(所在⽬录)主⽬录的外侧,新建了build的⽬录
但实际上我更换了 CMAKE_INSTALL_PREFIX的路径,或是以管理员运⾏,或是在源码⽬录下新建build⽬录,后来仔细看了⼀下setlocal
命令才发现问题。
实际原因:
问题出在哪⾥就找哪⾥!查看setlocal
解决⽅案:
1.了解setlocal
CMake编译VS项⽬时中可以添加事件
if(WIN32)
add_custom_command(TARGET ${proj_name} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${DuiLib_dll_path}/bin/$
"${bin_dir}/$
endif()
1. POST_BUILD——⽣成后事件
2. copy_if_different ⽂件不同则进⾏拷贝
2.分析setlocal
看⼀下我的setlocal命令:
D:softwarecmake_3_20_0bincmake.exe -E copy_directory
E:/git/TangClient_dev/dependence/runtime/ E:/git/TangClient_dev/Output/bin/win32/Debug/
拷贝到
E:/git/TangClient_dev/dependence/runtime/E:/git/TangClient_dev/Output/bin/win32/Debug/
错误1:
拷贝啥玩意不知道
错误2:
存不存在该路径
错误3:
如果存在该路径看⼀下⽂件路径分隔符是不是有问题
E:/git/TangClient_dev/Output/bin/win32/Debug/
更改为
E:gitTangClient_devOutputbinwin32Debug
错误3:
命令
/b
更改为
b
如果对您有所帮助,请点个赞!
未经允许,禁⽌转载!


发布评论