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