我想在setuid
中使用install(TARGETS...
启用我正在安装的程序的cmake
位。
我可以使用PERMISSIONS
子句执行此操作并指定SETUID
。但是当我这样做时,我会丢失所有默认权限,除非我也指定了所有这些权限。
例如,如果这是bash,就像运行chmod u=s,g=,o= file
而不是chmod u+s file
一样 - 关闭所有现有权限,而不是仅仅屏蔽要添加的权限。
cmake
是否有机制在不重复所有默认权限的情况下向已安装的目标添加权限?
答案 0 :(得分:2)
除了install
命令的PERMISSIONS选项外,CMake没有其他方法可以为已安装的文件设置权限。但是有很多方法可以简化权限设置。
例如,您可以定义变量,包含默认权限集:
set(PROGRAM_PERMISSIONS_DEFAULT
OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE)
并将其用作添加新权限的基础:
install(TARGETS myexe ... PERMISSIONS ${PROGRAM_PERMISSIONS_DEFAULT} SETUID)
如果在许多地方使用了一组权限,您可以定义包含该组的变量,并在需要时使用它:
set(PROGRAM_PERMISSIONS_BY_ROOT ${PROGRAM_PERMISSIONS_DEFAULT} SETUID)
...
install(TARGETS myexe ... PERMISSIONS ${PROGRAM_PERMISSIONS_BY_ROOT})