做网站中app客户端,网络服务提供者知道或应当知道,郑州一建招聘,开发公司设计部工作建议【CMake】Linux 下权限丢失与软链接失效问题 文章目录 【CMake】Linux 下权限丢失与软链接失效问题问题概述解决方法1 - 安装目录2 - 安装文件3 - 手动指定 使用 Linux 下原生命令行注意事项参考链接 问题概述
一般使用 CMake 安装#xff0c;在 Windows 平台不会出问题…【CMake】Linux 下权限丢失与软链接失效问题 文章目录 【CMake】Linux 下权限丢失与软链接失效问题问题概述解决方法1 - 安装目录2 - 安装文件3 - 手动指定 使用 Linux 下原生命令行注意事项参考链接 问题概述
一般使用 CMake 安装在 Windows 平台不会出问题因为 Windows 平台基本上除了管理员权限外没有其他什么文件权限。
使用 CMake 拷贝或者安装文件一般使用 file 或 install 命令在使用精简版的方式 如
file(INSTALL somefiles DESTINATION /full/path)
install(FILES somefiles DESTINATION /full/path)在 Linux 平台上会出现权限丢失
解决方法
1 - 安装目录
安装目录添加 USE_SOURCE_PERMISSIONS 选项 其 CMake 指令原型为
install(DIRECTORY dirs... DESTINATION dir[FILE_PERMISSIONS permissions...][DIRECTORY_PERMISSIONS permissions...][USE_SOURCE_PERMISSIONS] [OPTIONAL][CONFIGURATIONS [Debug|Release|...]][COMPONENT component] [FILES_MATCHING][[PATTERN pattern | REGEX regex][EXCLUDE] [PERMISSIONS permissions...]] [...])举例
install(DIRECTORY ${PROJECT_SOURCE_DIR}/dir DESTINATION /some/full/path
USE_SOURCE_PERMISSIONS)也可以通过设置 CMake 变量 CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS 来达到在所有使用 install 和 file(install) 的地方全局生效例
set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONSOWNER_READ OWNER_WRITE OWNER_EXECUTEGROUP_READ GROUP_EXECUTEWORLD_READ WORLD_EXECUTE)若此变量未设置则使用系统默认文件权限。
2 - 安装文件
install 使用 PROGRAMS此选项默认包含 OWNER_EXECUTE, GROUP_EXECUTE, WORLD_EXECUTE 权限也就相当于 linux 下对文件使用了
chmod ugox filename此指令原型为
install(PROGRAMS files... DESTINATION dir[PERMISSIONS permissions...][CONFIGURATIONS [Debug|Release|...]][COMPONENT component][RENAME name] [OPTIONAL])3 - 手动指定
在 install 时手动指定权限即指定其 PERMISSIONS 选项
install(TARGETS targets... [EXPORT export-name][[ARCHIVE|LIBRARY|RUNTIME|FRAMEWORK|BUNDLE|PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE][DESTINATION dir][PERMISSIONS permissions...][CONFIGURATIONS [Debug|Release|...]][COMPONENT component][OPTIONAL] [NAMELINK_ONLY|NAMELINK_SKIP]] [...])举例
install(TARGETS targets DESTINATION /some/full/path PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)或者定义一个自己的变量 在其他 install 处使用
set(MY_PROJECT_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
install(TARGETS targets DESTINATION /some/full/path PERMISSIONS ${MY_PROJECT_PERMISSIONS})使用 Linux 下原生命令行注意事项
cp 命令需要添指定选项否则会出现权限丢失或软连接失效
选项解释-p保留源文件或目录的所有属性信息-d复制链接文件时将目标文件也建立为链接文件
cp -d srcdir destdir -rf参考链接
https://cmake.org/cmake/help/v2.8.10/cmake.html#command%3ainstall