【问题标题】:How to change file permission when copying by add_custom_command in cmakecmake中通过add_custom_command复制时如何更改文件权限
【发布时间】:2016-09-01 23:22:42
【问题描述】:

我可以使用类似的东西通过 cmake 复制文件

file(GLOB IMAGES ${PROJECT_SOURCE_DIR}/Image/*)
file(COPY ${IMAGES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Image
     FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ)

但缺点是只有在重新配置 cmake 时才会调用此命令。我想出了一种在触发构建时复制它们的方法,如下所示

add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                  COMMAND ${CMAKE_COMMAND} -E copy_directory
                  "${PROJECT_SOURCE_DIR}/Image"
                  "${CMAKE_CURRENT_BINARY_DIR}/Image")

这符合我的需要,因为我无法像第一种方法那样想出改变文件权限的方法。我需要更改文件权限以确保它是正确的,否则在运行以下命令时某些图像可能会被错误地归类为可执行文件

find . -executable -type f

从 add_custom_command 复制时是否可以更改文件权限?

【问题讨论】:

  • copycopy_directorycopy_if_different 命令不应更改文件权限。如果他们这样做,您应该将其作为错误提交给 CMake。我没有看到使用 cmake 命令行更改文件权限的仅限 CMake 的方法。似乎图像已在源目录中标记为可执行文件。
  • @Torbjörn 真不幸。以我的经验,当在不同的操作系统中推送和拉取文件权限时,文件权限会意外交替。我将向 CMake 提交功能请求。

标签: c++ cmake


【解决方案1】:

CMake 开发人员实际上会给出有效的答案。关键是创建一个包含文件(COPY)的临时cmake脚本并调用它。

    file(GLOB IMAGES "${PROJECT_SOURCE_DIR}/Image/*")

    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/foo.cmake" "file(COPY ${IMAGES} 
    DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Image 
    FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ)")

    add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND 
    ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/foo.cmake)

【讨论】:

    猜你喜欢
    • 2013-10-24
    • 2012-11-14
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多