当前位置: 首页 > news >正文

【CMake】Linux 下权限丢失与软链接失效问题

【CMake】Linux 下权限丢失与软链接失效问题

文章目录

  • 【CMake】Linux 下权限丢失与软链接失效问题
    • 问题概述
    • 解决方法
      • 1 - 安装目录
      • 2 - 安装文件
      • 3 - 手动指定
    • 使用 Linux 下原生命令行注意事项
    • 参考链接

问题概述

一般使用 CMake 安装,在 Windows 平台不会出问题,因为 Windows 平台基本上除了管理员权限外,没有其他什么文件权限。

使用 CMake 拷贝或者安装文件一般使用 file 或 install 命令,在使用精简版的方式

file(INSTALL somefiles DESTINATION /full/path)
install(FILES somefiles DESTINATION /full/path)

在 Linux 平台上会出现权限丢失

解决方法

1 - 安装目录

安装目录,添加 USE_SOURCE_PERMISSIONS 选项
其 CMake 指令原型为

install(DIRECTORY dirs... DESTINATION <dir>[FILE_PERMISSIONS permissions...][DIRECTORY_PERMISSIONS permissions...][USE_SOURCE_PERMISSIONS] [OPTIONAL][CONFIGURATIONS [Debug|Release|...]][COMPONENT <component>] [FILES_MATCHING][[PATTERN <pattern> | REGEX <regex>][EXCLUDE] [PERMISSIONS permissions...]] [...])

举例

install(DIRECTORY ${PROJECT_SOURCE_DIR}/dir DESTINATION /some/full/path 
USE_SOURCE_PERMISSIONS)

也可以通过设置 CMake 变量 CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS 来达到在所有使用 install 和 file(install) 的地方全局生效,例:

set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONSOWNER_READ OWNER_WRITE OWNER_EXECUTEGROUP_READ GROUP_EXECUTEWORLD_READ WORLD_EXECUTE)

若此变量未设置,则使用系统默认文件权限。

2 - 安装文件

install 使用 PROGRAMS,此选项默认包含 OWNER_EXECUTE, GROUP_EXECUTE, WORLD_EXECUTE 权限,也就相当于 linux 下对文件使用了

chmod ugo+x filename

此指令原型为

install(PROGRAMS files... DESTINATION <dir>[PERMISSIONS permissions...][CONFIGURATIONS [Debug|Release|...]][COMPONENT <component>][RENAME <name>] [OPTIONAL])

3 - 手动指定

在 install 时手动指定权限,即指定其 PERMISSIONS 选项

install(TARGETS targets... [EXPORT <export-name>][[ARCHIVE|LIBRARY|RUNTIME|FRAMEWORK|BUNDLE|PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE][DESTINATION <dir>][PERMISSIONS permissions...][CONFIGURATIONS [Debug|Release|...]][COMPONENT <component>][OPTIONAL] [NAMELINK_ONLY|NAMELINK_SKIP]] [...])

举例

install(TARGETS targets DESTINATION /some/full/path PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

或者定义一个自己的变量 在其他 install 处使用

set(MY_PROJECT_PERMISSIONS  OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
install(TARGETS targets DESTINATION /some/full/path PERMISSIONS ${MY_PROJECT_PERMISSIONS})

使用 Linux 下原生命令行注意事项

cp 命令需要添指定选项,否则会出现权限丢失或软连接失效

选项解释
-p保留源文件或目录的所有属性信息
-d复制链接文件时,将目标文件也建立为链接文件
cp -d srcdir destdir -rf

参考链接

https://cmake.org/cmake/help/v2.8.10/cmake.html#command%3ainstall

http://www.lryc.cn/news/376063.html

相关文章:

  • 内部类介绍
  • 【CVPR2021】LoFTR:基于Transformers的无探测器的局部特征匹配方法
  • 总结一下 C# 如何自定义特性 Attribute 并进行应用
  • 三种暴露方法和引入方式
  • “Git之道:掌握常用命令,轻松管理代码“
  • Linux vim 文本编辑 操作文本 三种模式
  • JavaFX DatePicker
  • 开展“安全生产月”活动向媒体投稿的好方法找到了
  • 商讯杂志商讯杂志社商讯编辑部2024年第10期目录
  • 在VS Code中快速生成Vue模板的技巧
  • 新火种AI|Sora发布半年之后,AI视频生成领域风云再起
  • 《UNIX环境高级编程》第三版(电子工业出版社出品)——两年磨一剑的匠心译作
  • 【RK3588/算能/Nvidia智能盒子】AI“值守”,规范新能源汽车充电站停车、烟火及充电乱象
  • 使用ReentrantLock和ThreadPoolExecutor模拟抢课
  • VirtFuzz:一款基于VirtIO的Linux内核模糊测试工具
  • 统计学一(术语,正态)
  • CleanMyMac X for Mac系统优化垃圾清理软件卸载 工具(小白轻松上手,简单易学)
  • 从0开始开发一个简单web界面的学习笔记(HTML类)
  • 【机器学习】对大规模的文本数据进行多标签的分类处理
  • C++之std::type_identity
  • 头歌资源库(10)拼数字
  • 虚谷数据库-定时作业
  • AWD攻防比赛流程手册
  • Golang的json解析--Gjson库的使用举例
  • 基于Langchain构建本地大型语言模型(LLM)问答系统的经验分享
  • 对抗式生成模仿学习(GAIL)
  • 信息系统项目管理师 | 新一代信息技术
  • 安全宣传咨询日活动向媒体投稿记住这个投稿好方法
  • 第7章:系统架构设计基础知识-软件架构风格
  • 自制调色小工具给图片加滤镜,修改图片红、绿、蓝通道及亮度,修改图片颜色