解决QT NMAKE:-1: error: U1077: “echo”: 返回代码“0x1”

最近用cmake构建QT工程,做了一些小实验,期间遇到了这个问题,记录一下。

网上看到遇到这个问题的人,问题都各有不同,我这边遇到的问题是这样的,我想要在CMake中将导入的第三方库复制到生成的可执行文件的bin目录下,于是写了下面一段代码:

#将依赖库复制到目标文件夹
add_custom_command(TARGET yxwidgets PRE_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy_directory
                   ${CMAKE_SOURCE_DIR}/lib/liteavSdk/lib
                   ${bin_dir}/${CMAKE_BUILD_TYPE}
                   )

这个代码本身没啥语法问题,但是我搞错了一个比较重要的点,那就是CMAKE_SOURCE_DIRCMAKE_CURRENT_SOURCE_DIR这两个参数虽然有时候用起来效果是一样的(工程没有子项目的情况下),但是实际作用却并不相同,下面看看官方文档的解释:

CMAKE_SOURCE_DIR:
The path to the top level of the source tree. 
当前工程目录的顶层路径

CMAKE_CURRENT_SOURCE_DIR:
The path to the source directory currently being processed.
This the full path to the source directory that is currently being processed by cmake.
当前正在处理的源目录的路径。
这是cmake当前正在处理的源目录的完整路径。

CMAKE_SOURCE_DIR即当前工程目录的最顶层的路径,因为我们在构建工程的时候经常会嵌套工程,所以这个变量表示为当前工程最顶层目录中的文件夹。

CMAKE_CURRENT_SOURCE_DIR即当前正在处理的工程目录的路径,举个栗子:如果你的项目中有一个工程项目A,当中包含子项目B,那么CMAKE_SOURCE_DIR表示的是项目A在操作系统的路径,而CMAKE_CURRENT_SOURCE_DIR表示的是子项目B的路径。

我犯的错误是错将CMAKE_SOURCE_DIR当做CMAKE_CURRENT_SOURCE_DIR来使用,结果就是cmake找不到我想要copy的路径,于是报了这个错误,所以建议看到这个错误的同学可以检查一下自己的cmake文件是否编写错误。

改正之后的代码:

#将依赖库复制到目标文件夹
add_custom_command(TARGET yxwidgets PRE_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy_directory
                   ${CMAKE_CURRENT_SOURCE_DIR}/lib/liteavSdk/lib
                   ${bin_dir}/${CMAKE_BUILD_TYPE}
                   )

一句话总结,我的这个错误是由于CmakeList.txt编写的库文件目录错误引起的。

 

补充:

第二次出现这个问题,是因为程序崩溃了,我用visual studio打开了dump文件,并开启了调试,但是vs一直没有关闭,就去点击运行qt,于是再次出现了这个报错,只要将vs关闭调试或者直接将vs关闭就可以了。

你可能感兴趣的:(C++,编程环境)