一、问题描述
CMake编译ZXing-cpp,编译成功后,打开项目,x86(win32)平台生成解决方案成功,但在x64平台,debug模式下报错:error MSB3073: 命令“setlocal”,如下图:
二、问题原因及解决方案
(一)原因
- 由于在CMake GUI中CMAKE_INSTALL_PREFIX指定为C盘目录,所以install编译生成时需要权限。此时,需要以管理员身份运行Vs即可,见解决方案1。
- cmake时,设置的build目录不对,见解决方案2。
(二)解决方案
-
以管理员身份运行vs
(1)以vs2013为例,找到vs2013快捷方式,右键属性,找到目标位置的devenv.exe(vs安装路径),我的目标位置为“D:\ProgramFiles\VS2013\Common7\IDE”
(2)找到devenv.exe文件 右键-兼容性疑难解答
(3)选疑难解答程序
(4)选择该程序需要附加权限,点击下一页
(5)点测试程序(不点击不让下一页),点下一页
注意:
测试时可能会打开vs,询问是否允许对设备进行更改(即是否用管理员权限运行),如下图2所示,选择是,打开vs后关闭即可。以后每次打开vs工程时都会有此询问,点是即可。
(6)是,保存设置
(7)修复完成,关闭
上述操作完成后,即开启以管理员身份运行vs,但需注意的是每次打开.sln工程时,会跳出询问,点是即可。 -
CMake编译时,正确设置build目录
说明:
本人尝试以下方法未解决问题,仍然报相同错误。鉴于是网上推荐做法,故放在此处,如有朋友用此方式成功解决问题,可在评论区评论。错误做法:
在源码(CMakelist.txt所在目录)主目录的外侧,新建了build的目录,图中,zxing-cpp-master为主目录。
正确做法:
在主目录zxing-cpp-master下新建这个build目录。
-
个例解决方案,仅供参考。查看报错信息,分析原因,本报错是解决方案中INSTALL项目,查看发现INSTALL项目对于程序运行无用,因此,打开配置管理器,将INSTALL项目的生成取消,再重新生成解决方案,生成成功,项目可以正常运行。
-
由于本工程由多个项目组成,其中一个项目为启动项目,设置启动项目的工程属性,项目-XXX 属性-配置属性-链接器-清单文件。设置完成后,点调试-开始执行不调试,会弹出解决方案1-(5)中是否允许更改的弹窗,点是,程序可以正常运行。但是,若要调试运行,需重新开启管理员权限,根据提示进行重启vs,再进行调试运行即可。
三、结语
以上为error MSB3073: 命令“setlocal”的原因分析及解决方案。原创不易,欢迎大家的点赞、收藏、评论、打赏~
参考链接:
CMake编译的VS工程,安装时遇到错误:error MSB3073: 命令“setlocal
设置VS以管理员身份运行
VS 设置编译后的程序可以以管理员身份运行