安装前请检查目标目录的权限

Check permissions of the destination directory before installing

本文关键字:权限 目标目录 检查 安装      更新时间:2023-10-16

我一直在文档和SO中搜索,但我还没有找到这个问题的答案。

使用cmake,我试图在安装一些库之前检查DESTINATION目录的权限。

是否有一些命令在cmake做这个?我需要用自定义命令进行检查吗?

作为一个例子,这是我在CMakeLists.txt中的代码:

INSTALL( TARGETS ${LIBRARY_NAME}
 DESTINATION lib/plugins/
 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE )

这个想法是在安装插件之前检查用户是否有在lib/plugins/中写入所需的权限。

您可以使用install(SCRIPT ...)命令流在安装阶段执行一些CMake脚本。例如:

check_script.cmake.in:

EXECUTE_PROCESS(COMMAND test -w @CMAKE_INSTALL_PREFIX@/lib/plugins
    RESULT_VARIABLE res)
IF(res)
    MESSAGE(FATAL_ERROR "No write permissions on plugins directory")
ENDIF()

CMakeLists.txt:

CONFIGURE_FILE(check_script.cmake.in check_script.cmake @ONLY)
INSTALL(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/check_script.cmake)
INSTALL( TARGETS ${LIBRARY_NAME} DESTINATION lib/plugins/ ...)

正如您所看到的,在安装阶段检查文件权限是太多的工作。实际上,您很少需要这样的检查:如果安装文件失败,整个安装过程立即停止,并向用户显示适当的消息。