【问题标题】:Zip creation using CMake with no relative path使用没有相对路径的 CMake 创建 Zip
【发布时间】:2020-04-17 18:48:45
【问题描述】:

我想将构建工件捆绑到一个 zip 中,以便在交付服务器上交付它们。我将 zip 创建集成到 CMake 例程中。

# zip the final release files into the build artifact
# call the zipping with 'cmake --build . --target zip' or 'make zip'
string(TIMESTAMP DATE_STRING %Y%m%d)
add_custom_target(zip
    COMMAND ${CMAKE_COMMAND} -E tar "cfv" "${PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION}-${DATE_STRING}.zip" "--format=zip"  "--"
            "${PROJECT_SOURCE_DIR}/bin/release/*")

工件被捆绑到 ProjectSourceDir 的 bin/release 文件夹中。 我的问题是,zip 文件具有我构建目录中文件的相对路径。所以所有文件都位于../bin/release/ 下,这不是我想要的。我想将文件放在 zip 文件的“主文件夹”中。

我找到了在我的构建文件夹中准备 zip 文件夹的解决方案,但我认为这是非常不切实际或看起来很脏的东西。

【问题讨论】:

    标签: cmake


    【解决方案1】:

    WORKING_DIRECTORY 可以指定给add_custom command

    add_custom_target(zip 
        COMMAND ${CMAKE_COMMAND} -E tar cvf ${PROJECT_SOURCE_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION}-${DATE_STRING}.zip --format=zip .
        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/bin/release
    )
    

    您不需要示例中给出的所有额外引用。

    【讨论】:

    • 这很完美。我必须做的唯一调整是在 zip 文件名之前添加一个 ../,否则会在工作目录中创建 zip,它可以在新的旧 zip 中解决(在创建 zip 之前没有清理)创建了一个。非常感谢
    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2022-06-19
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多