C++ CMake:提取tar会给出一个没有消息的错误

C++ CMake:提取tar会给出一个没有消息的错误,c++,linux,build,cmake,tar,C++,Linux,Build,Cmake,Tar,我想下载一个tar文件并在${CMAKE\u BINARY\u DIR}中提取它。我所有的尝试都失败了,我一直得到一个非零的返回值。以下是MCVE: cmake_minimum_required(VERSION 3.0) set(QRCODE_LIB_URL "https://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.bz2") set(QRCODE_LIB_DOWNLOAD_TARGET "${CMAKE_BINARY_DIR}/qrenco

我想下载一个tar文件并在
${CMAKE\u BINARY\u DIR}
中提取它。我所有的尝试都失败了,我一直得到一个非零的返回值。以下是MCVE:

cmake_minimum_required(VERSION 3.0)

set(QRCODE_LIB_URL "https://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.bz2")
set(QRCODE_LIB_DOWNLOAD_TARGET "${CMAKE_BINARY_DIR}/qrencode.tar.bz")
file(DOWNLOAD ${QRCODE_LIB_URL} ${QRCODE_LIB_DOWNLOAD_TARGET} SHOW_PROGRESS)
execute_process(
    COMMAND "${CMAKE_COMMAND} -E tar xvz ${QRCODE_LIB_DOWNLOAD_TARGET}"
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    OUTPUT_VARIABLE QRCODE_EXTRACT_OUTPUT
    ERROR_VARIABLE QRCODE_EXTRACT_OUTPUT
    RESULT_VARIABLE QRCODE_EXTRACT_RETURN_VALUE
    )

if (NOT QRCODE_EXTRACT_RETURN_VALUE EQUAL 0)
    message(FATAL_ERROR "Error: ${QRCODE_EXTRACT_OUTPUT}")
endif()

project(cmakeTarTest)
add_executable(${PROJECT_NAME} "main.cpp") # this can be removed

最有问题的部分是错误没有显示任何消息,我不理解。一段时间以来,我一直在使用相同的方法(使用
execute\u process
)来运行许多脚本,包括python脚本。显然,这里有一些不同的东西我无法理解。

我找到了解决办法。命令应如下所示:

COMMAND "${CMAKE_COMMAND}" "-E" "tar" "xvz" "${QRCODE_LIB_DOWNLOAD_TARGET}"
Tsyvarev评论中的暗示让我意识到了这一点


编辑:我仍然不明白为什么错误变量是空的。

@Tsyvarev如果您指的是为什么两个变量都有相同的名称,这就是cmake合并stderr和stdout的方式。哦,没有注意到您对两个选项都使用了相同的变量。顺便说一句,删除
命令
选项值周围的双引号-双引号内的所有内容都被视为单个命令行标记,但是
cmake
及其选项(
-E
等)应该是不同的标记。@Tsyvarev感谢您的提示。我算出了。
ERROR\u变量
OUTPUT\u变量
是空的,因为它们包含标准错误的输出和正在运行的命令的标准输出。最初的命令是
cmake-E tar whatever.tar
,它不是有效的文件名,系统无法运行,因此在标准错误或标准输出中不会捕获任何内容。变量
RESULT\u变量
包含错误值,在Windows上该值为:
系统找不到指定的文件