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

los*_*mbo 5 unzip tar cmake

我目前正在使用execute_command在构建之前解压缩一些文件。我想解压缩文件夹,当源中的 zip 文件发生更改时,该文件夹实际上会用目标文件夹中的新文件替换旧文件。有人可以给我一些建议吗?

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

execute_process(
COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_SOURCE_DIR}/abc.zip
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
Run Code Online (Sandbox Code Playgroud)

我尝试使用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 ) 
Run Code Online (Sandbox Code Playgroud)

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

los*_*mbo 9

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

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)
Run Code Online (Sandbox Code Playgroud)

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