CMake编译VS项目出现error MSB3073: 命令“setlocal.... “

有以下三种原因,均会导致这个问题的出现,需要同时避免:


原因1:install需要管理权限。

install文件需要管理员权限,打开VS时不是使用管理员权限打开。

解决方法:

        方式1)退出VS,再用管理员权限打开VS,然后就好了。

        方式2)把install位置放在C盘之外。我采纳的这种方式。

                我选择方式2的原因是:1)节省C盘空间;2)便于规范化管理,源代码和install的位置在一起,便于寻找该源文件产生的静态库,从而便于给别的依赖库提供支撑;3)操作简单,configure和generate之后,直接点击open project即可,比较方便。

展开cmake组, 修改里面的CMAKE_INSTALL_PREFIX选项。

(备注,在上图中我标注出了Grouped和Advanced两个选项,其中Grouped用于把CMakeLists.txt内容条目化并分组;Advances选项,用于显示依赖库,并配置依赖库的寻找路径,比如,我这里要编译的libpng依赖于zlib)


原因2:build目录的创建位置不对。

设置的build的目录不对。

解决方法:build目录应该放在文件根目录下,而不是根目录外面。


原因3:编译库的linux/windows版本不对。

下载的编译库的版本不对,一般.zip压缩格式的版本是针对windows系统的;.tar.gz压缩格式的版本是针对linux系统的。不同版本的CMakeLists.txt上有细微差异。重新下载依赖库的版本即可。

比如我一开始编译的是libpng-1.6.34.tar.gz版本,一直出现setlocal的问题。通过以上两种方法都没有解决。直到意识到这个问题,重新下载.zip版本之后,一切都顺理成章,很顺利。

解决方法:

方式1)重新下载对应的.zip版本的依赖库。

方式2)其实在windows下也能编译linux版本的依赖库,因为底层都是C/C++,而CMAKE也是跨平台的工具。只需要简单修改CMakeLists.txt即可。

        (1)打开CMakeLists.txt,找到project()指令,我的如下

cmake_minimum_required(VERSION 3.0.2)
cmake_policy(VERSION 3.0.2)

# Set MacOSX @rpath usage globally.
if (POLICY CMP0020)
  cmake_policy(SET CMP0020 NEW)
endif(POLICY CMP0020)
if (POLICY CMP0042)
  cmake_policy(SET CMP0042 NEW)
endif(POLICY CMP0042)
# Use new variable expansion policy.
if (POLICY CMP0053)
  cmake_policy(SET CMP0053 NEW)
endif(POLICY CMP0053)
if (POLICY CMP0054)
  cmake_policy(SET CMP0054 NEW)
endif(POLICY CMP0054)

set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo")

project(libpng ASM C)# 我的在这里-----------------------------
enable_testing()

        (2)把project()命令中的ASM删除,如下

cmake_minimum_required(VERSION 3.0.2)
cmake_policy(VERSION 3.0.2)

# Set MacOSX @rpath usage globally.
if (POLICY CMP0020)
  cmake_policy(SET CMP0020 NEW)
endif(POLICY CMP0020)
if (POLICY CMP0042)
  cmake_policy(SET CMP0042 NEW)
endif(POLICY CMP0042)
# Use new variable expansion policy.
if (POLICY CMP0053)
  cmake_policy(SET CMP0053 NEW)
endif(POLICY CMP0053)
if (POLICY CMP0054)
  cmake_policy(SET CMP0054 NEW)
endif(POLICY CMP0054)

set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo")

project(libpng C) # 我的修改在这里-----------------------
enable_testing()

        (3)问题解决,很顺畅。 

原因4(可能):cmake版本不对。

        cmake版本过于新,与第三方依赖库的版本不兼容。无论是cmake还是第三方依赖库,都是在不断迭代更新的。某个时间段的第三方依赖库是用当时的cmake编译的。随着cmake的迭代更新,可能在一些小特性上发生了一些小的变化,导致新版本的cmake不再适配老版本的第三方依赖库。此时,如果一定要使用一个老版本的第三方依赖库,建议使用对应时间段的cmake去编译,应该会好一些。

解决方法:

        查看第三方依赖库的发布时间,找到对应时间段的cmake,下载并安装。然后用对应版本的cmake编译第三方依赖库。

原因5(可能):依赖库的编译方式不对。

        依赖库的编译方式不对。当前编译方式是x64的,但是依赖库的编译方式是x32的,可能不识别。

解决方案:

        重新编译依赖库,与当前的编译方式保持一致:都是x64或都是x32.


参考CMake编译VS项目出现error MSB3073: 命令“setlocal.... “_严重性代码说明项目文件行禁止显示状态 错误msb3073命令“setlocal "c:\p-CSDN博客

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值