我有一个 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)的文件权限的正确方法是什么?
答案 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
)