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

如果对您有所帮助,请点个赞!

未经允许,禁⽌转载!