当zip文件发生变化时,CMake会自动解压缩(在构建时)

时间:2018-02-20 18:26:50

标签: 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中给出文件列表,因为它非常大

1 个答案:

答案 0 :(得分:0)

我实现了这一点,至少在使用下面代码的情况下

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。