c++ - 在cmake中通过add_custom_command复制时如何更改文件权限

标签 c++ cmake

我可以使用类似的东西通过 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 复制时是否可以更改文件权限?

最佳答案

CMake 开发人员实际上以有效的答案作为回应。关键是创建一个临时的 cmake 脚本,其中包含文件 (COPY) 并调用它。

    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)

关于c++ - 在cmake中通过add_custom_command复制时如何更改文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282243/

相关文章:

c++ - Eclipse Oxygen 和 org.eclipse.jface 给出 NullPointerException 对话框

c++ - boost::asio 和事件对象

CMake 的 FIND_PACKAGE 未设置变量

sqlite - CMake的链接器错误

c++ - 如何在cmake中添加库源

c++ - 在 C++ 中将天数转换为周数

c++ - 通用配置代码的 Cmake 和编码风格

c++ - 是否有可能改变 cout 的作用?

c++ - 是否有用于 OpenNI2 的 CMakeLists?

c++ - C++ Cmake的OpenCV