如何在不重复默认权限的情况下向cmake目标添加权限?

时间:2015-10-02 18:57:31

标签: cmake

我想在setuid中使用install(TARGETS...启用我正在安装的程序的cmake位。

我可以使用PERMISSIONS子句执行此操作并指定SETUID。但是当我这样做时,我会丢失所有默认权限,除非我也指定了所有这些权限。

例如,如果这是bash,就像运行chmod u=s,g=,o= file而不是chmod u+s file一样 - 关闭所有现有权限,而不是仅仅屏蔽要添加的权限。

cmake是否有机制在不重复所有默认权限的情况下向已安装的目标添加权限?

1 个答案:

答案 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})