如何设置由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
相关产品推荐
相关产品推荐

