我有一个文件wrapper.sh.in,其内容如下:
#!/bin/bash
DEPENDENCY_VERSION=@dependency_VERSION@
/location/of/installed/dependency/${DEPENDENCY_VERSION}/some_script.sh "$@"
Run Code Online (Sandbox Code Playgroud)
这个wrapper.sh.in脚本具有常规不可执行文件(0644)的通常文件权限,但我需要CMake 生成的文件具有执行权限,因为它是一个脚本,因此意味着要运行。
以下是我当前在 CMakeLists.txt 中执行的操作,以生成包装器脚本:
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/wrapper.sh.in
${CMAKE_CURRENT_SOURCE_DIR}/wrapper.sh
@ONLY
)
Run Code Online (Sandbox Code Playgroud)
这是我尝试更改生成的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
)
Run Code Online (Sandbox Code Playgroud)
尝试#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
)
Run Code Online (Sandbox Code Playgroud)
将生成的wrapper.sh脚本的文件权限更改为普通脚本的文件权限(0755)的
正确方法是什么?
在大多数情况下,“就地”复制文件是个坏主意。
相反,将文件配置到一个(中间)位置,然后将其(具有更改的权限)复制到最终位置:
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
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7691 次 |
| 最近记录: |