我使用 CMake 创建了一个 shell 脚本,如下所示:
file(WRITE somescript.sh "echo foo!")
我希望用户能够立即执行该脚本。为此,最好从 CMake 中更改该文件的权限。
CMake中有类似
chmod u+x somescript.sh
的东西吗?
install
的问题是,当目标目录等于源目录并且文件本身没有更改时,现有文件不会被覆盖(CMake 似乎比较时间戳)。但没关系,我为大家找到了一个可行的解决方案:
${CMAKE_BINARY_DIR}/tmp
file (COPY ${CMAKE_BINARY_DIR}/tmp/somescript.sh DESTINATION ${CMAKE_BINARY_DIR} FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ)
file(REMOVE_RECURSIVE ${CMAKE_BINARY_DIR}/tmp/)
您可以在 istall 命令中执行此操作。使用此标签:
install(
FILES somescript.sh
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
DESTINATION /some/destination
)
如果你想复制二进制文件,我会使用 USE_SOURCE_PERMISSIONS
从 cmake 版本 3.19 开始,现在可以使用 file(CHMOD ...) 命令。语法是:
file(CHMOD <files>... <directories>... [PERMISSIONS <permissions>...] [FILE_PERMISSIONS <permissions>...] [DIRECTORY_PERMISSIONS <permissions>...])
例如:
file(CHMOD somescript.sh PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ)
请参阅文档了解更多详细信息。