【问题标题】:CMake unzip automatically(while building) when the zip file changes当 zip 文件更改时,CMake 自动解压缩(在构建时)
【发布时间】:2018-07-04 19:42:38
【问题描述】:

我目前正在使用 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_command() 吗?解压后的文件是否用作另一个构建步骤的输入?
  • 不要对代码使用注释,而是将其添加到您的问题帖子中。

标签: cmake tar unzip


【解决方案1】:

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

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    相关资源
    最近更新 更多