当 zip 文件更改时,CMake 自动解压缩(在构建时)

标签 cmake tar unzip

我目前正在使用 execute_command 在构建之前解压缩一些文件。
当源中的 zip 文件更改时,我想解压缩实际上用目标文件夹中的新文件替换旧文件的文件夹。谁能给我一些建议?

目前我正在做这样的事情,

execute_process(
COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_SOURCE_DIR}/abc.zip
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)

我尝试使用 add_custom_command() 但我正在为每个构建执行它。
我只希望它在源 zip 文件更改时解压缩。
add_custom_command( OUTPUT ${LibsList} 
                    COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_SOURCE_DIR}/libs.zip 
                    WORKING_DIRECTORY ${CMAKE_BINARY_DIR} 
                    DEPENDS ${CMAKE_SOURCE_DIR}/libs.zip ) 

它们主要包含头文件和一些共享库。我通常在构建时需要头文件,在运行时需要共享库。如果可能,我不会在 OUTPUT 中提供文件列表,因为它非常大

最佳答案

我使用下面的代码实现了这一点,至少在我的场景中,

add_custom_target( unZip ALL)
add_custom_command(TARGET unZip PRE_BUILD
   COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/abc/
   COMMAND ${CMAKE_COMMAND} -E tar xzf {CMAKE_SOURCE_DIR}/abc.zip
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS ${CMAKE_SOURCE_DIR}/abc.zip
COMMENT "Unpacking abc.zip"
VERBATIM)

现在我使所有目标都依赖于“unZip”。这样,在重新生成 unZip 时或在生成时如果 abc.zip 更改,就会发生 unZip。

关于当 zip 文件更改时,CMake 自动解压缩(在构建时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48891928/

相关文章:

python - 使用 python Requests 下载一个压缩的 tar.gz 文件并使用 tar 解压

java - Android Java : Reading file from zip file into webview/string, 为什么ZipInputStream限制读取性能?

linux - Xcode 未在 Linux 上列为 CMake 生成器

linux - Tar 模式匹配层次结构中任何位置的文件/文件夹

php - tar 错误 : Unexpected EOF in archive when running via Cron/PHP

linux - 如何在 Linux 中使用 unzip 从 zipfile.zip/dir1/dir2 中仅提取 dir2?

java - 如何从 jar 文件中提取 zip 文件

c++ - 使用 Ceres 求解器进行 CMake-ing 项目时冲突的 Eigen 依赖项

cmake - CTest 未检测到测试

cmake - 使用 CMake 和 CPack 的多个 debian 软件包的名称和描述