如何为CMake生成的文件添加执行权限?

时间:2017-08-04 19:04:48

标签: cmake

我有一个 wrapper.sh.in 文件,其中包含以下内容:

#!/bin/bash
DEPENDENCY_VERSION=@dependency_VERSION@
/location/of/installed/dependency/${DEPENDENCY_VERSION}/some_script.sh "$@"

wrapper.sh.in 脚本具有常规非可执行文件(0644)的常用文件权限,但我需要CMake生成的文件具有执行权限,因为它是脚本,因此意味着要运行。


以下是我目前在CMakeLists.txt中所做的事情,以便生成我的包装脚本:

configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/wrapper.sh.in
    ${CMAKE_CURRENT_SOURCE_DIR}/wrapper.sh
    @ONLY
    )


这是我尝试更改生成的 wrapper.sh 脚本的权限。

尝试#1(失败):

file(
    COPY ${CMAKE_CURRENT_SOURCE_DIR}/wrapper.sh
    DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}
    FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
    )

尝试#2(失败):

install(
    FILES ${CMAKE_CURRENT_SOURCE_DIR}/wrapper.sh
    DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}
    PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
    COMPONENT runtime
    )


将生成的 wrapper.sh 脚本的文件权限更改为普通脚本(0755)的文件权限的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

在大多数情况下,“在某处”复制文件是个坏主意。

相反,将文件配置到一个(中间)位置,并将其(具有更改的权限)复制到最终位置:

configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/wrapper.sh.in
    ${CMAKE_CURRENT_SOURCE_DIR}/tmp/wrapper.sh
    @ONLY
    )

file(
    COPY ${CMAKE_CURRENT_SOURCE_DIR}/tmp/wrapper.sh
    DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}
    FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
    )