Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在cmake中通过add_custom_命令复制时更改文件权限_C++_Cmake - Fatal编程技术网

C++ 如何在cmake中通过add_custom_命令复制时更改文件权限

C++ 如何在cmake中通过add_custom_命令复制时更改文件权限,c++,cmake,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时才会调用此命令。我想出了一种方法,每当

我可以通过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_命令复制文件时,是否可以更改文件权限?

CMake开发人员实际上会给出一个有效的回答。关键是创建一个包含文件(副本)的临时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)

copy
copy\u目录
copy\u if\u不同
命令不应改变文件权限。如果他们这样做了,你应该把它作为bug提交给CMake。我没有看到使用
CMake
命令行更改文件权限的唯一方法。似乎源目录中已经将图像标记为可执行文件。@Torbjörn这太不幸了。根据我的经验,当在不同的操作系统之间推拉文件时,文件权限会意外地发生变化。我将向CMake提交功能请求。