You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置由CMake构建的RPM文件中的目录权限位?

解决CMake RPM打包目录权限受umask影响的问题
  • 显式在install命令中指定目录权限
    放弃依赖全局的CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS,直接在CMake的install指令里为目标目录设置明确权限:

    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/my_dir
            DESTINATION /opt/myapp
            PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
                        GROUP_READ GROUP_EXECUTE
                        WORLD_READ WORLD_EXECUTE)
    

    这种方式会直接把权限写入RPM包的文件列表,不受构建用户umask干扰。

  • 通过CPACK_RPM变量强制RPM权限
    如果需要全局统一设置,可以用CPACK_RPM_SPEC_MORE_DEFINE向RPM spec文件中添加权限定义,比如强制所有目录使用0755权限:

    set(CPACK_RPM_SPEC_MORE_DEFINE "%define _default_dir_perms 0755")
    

    这会覆盖RPM构建时的默认目录权限规则,无视构建用户的umask设置。

  • 检查CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS的生效条件
    这个变量只对CPACK自动生成的安装目录生效,如果你的目录是通过自定义install命令创建的,且没有继承全局权限,变量不会起作用。确保你的install命令没有显式指定其他权限,或者直接引用该变量作为权限参数:

    install(DIRECTORY ... PERMISSIONS ${CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS})
    

内容的提问来源于stack exchange,提问作者Greg Hewgill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:22:41