【发布时间】:2021-01-05 08:20:52
【问题描述】:
我有一个通用组件模板,它应该以下列方式安装不同的项目:
/path/to/Components/<COMPONENT_NAME>/<COMPONENT_VERSION>/CONTENTS
我在 CMakeLists.txt 中的安装规则如下所示:
install(TARGETS ${TARGET_NAME} DESTINATION lib PERMISSIONS ${FILE_PERMISSIONS})
install(FILES include/${TARGET_NAME}.h DESTINATION include PERMISSIONS ${FILE_PERMISSIONS}
通过仅设置 PERMISSIONS,安装规则创建的目录将具有系统的 umask。使用 install 的目录选项不适合我的用例,因为我只打算安装单个/特定文件(特别是在包含目录中)。 我发现了一个非常好的行为描述/错误报告。 https://gitlab.kitware.com/cmake/cmake/-/issues/9620
有了这些新信息,我设法设置了 CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS,它可以部分解决该问题,但不能完全解决。问题是已安装的目录应具有读取和执行权限,并且没有用户、组或其他人的写入权限。
通过设置:
set (CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE)
我不再被允许在目录树中创建子文件夹/文件。
所以问题是: cmake 中是否有一个选项可以安装组件(在没有 root/admin 权限的用户空间中)并将整个目录结构(新创建的目录的)保留为 OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE?基本上它应该在安装时设置目录的写访问权限,并以将目录设置为指定的访问标志结束。
【问题讨论】:
-
如果没有人有写权限怎么能创建任何东西?还是您的意思是让管理员仍然具有写入权限并且安装脚本以使用管理员权限运行?
-
我认为对这种行为存在误解。基本上,要安装的用户在文件夹中具有写访问权限:/path/to/Components/
,但应写入已安装的目录,然后即使安装它的用户也只有读访问权限。 -
(1) 但重点是什么?所有者可以随意更改目录的权限,因此使其对他们不可写是缺乏保护的。 (2) 目录必须是初始可写的,否则不能安装文件。
标签: c++ c makefile cmake build