VS 编译CMake生成项目 命令setlocal报错(error MSB3073)

|版本声明:山河君,未经博主允许,禁止转载

项目场景:

使用CMake编译代码,生成VS2017项目,在vs2017中debug模式编译项目

问题描述:

debug模式编译项目后,直接报错

setlocal命令出错error MSB3073

setlocal命令如下:

setlocal
D:\software\cmake_3_20_0\bin\cmake.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:\software\cmake_3_20_0\bin\cmake.exe -E copy_directory E:/git/TangClient_dev/dependence/cef/win32/bin/Debug/ 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

原因分析:

虚假原因:
从网上寻找解决办法,大多原因说是由于
1.CMake GUI中CMAKE_INSTALL_PREFIX指定为C盘目录,导致权限不够

2.cmake时,设置的build目录不对的原因。如在源码(CMakelist.txt所在目录)主目录的外侧,新建了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/$<CONFIGURATION>/DuiLib.dll"
        "${bin_dir}/$<CONFIGURATION>")
endif()
  1. POST_BUILD——生成后事件
  2. copy_if_different 文件不同则进行拷贝

2.分析setlocal

看一下我的setlocal命令:

D:\software\cmake_3_20_0\bin\cmake.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:\git\TangClient_dev\Output\bin\win32\Debug\

错误3:
命令

/b

更改为

\b

如果对您有所帮助,请点个赞!
未经允许,禁止转载!

  • 25
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值