我想下载一个 tar 文件并将其解压到 ${CMAKE_BINARY_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_process
)来运行许多脚本,包括 python 脚本。显然这里有一些不同的东西我无法理解。
最佳答案
我找到了解决办法。命令应该是这样的:
COMMAND "${CMAKE_COMMAND}" "-E" "tar" "xvz" "${QRCODE_LIB_DOWNLOAD_TARGET}"
Tsyvarev评论中的暗示让我意识到了这一点。
编辑:我仍然不明白为什么错误变量为空。
关于c++ - CMake:提取 tar 会出现错误,但没有消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54380383/