安装位置缺少 CMake 共享库可执行权限

CMake shared library executable permission missing at install location

目前我正在创建一个将安装实用程序共享库的简单项目。

这是我的 CMakeLists:

cmake_minimum_required (VERSION 2.6)
project(MathLibs CXX)
add_library (${PROJECT_NAME} SHARED
    fact.cpp
    fibo.cpp
    isPrime.cpp
    )
install (TARGETS ${PROJECT_NAME}
    RUNTIME DESTINATION ${PROJECT_NAME}/bin
    LIBRARY DESTINATION ${PROJECT_NAME}/lib
    ARCHIVE DESTINATION ${PROJECT_NAME}/lib)

因为我没有 root 权限,所以我无法在系统 lib 文件夹中安装共享库。我将 CMAKE_INSTALL_PREFIX 覆盖为 $HOME/apps.

当我构建共享库时,它具有可执行权限。 这是包含共享库的构建文件夹:

-rw-rw-r-- 1 ameya ameya 9714 Jun 18 20:02 CMakeCache.txt
drwxrwxr-x 5 ameya ameya 4096 Jun 18 20:02 CMakeFiles
-rw-rw-r-- 1 ameya ameya 2701 Jun 18 20:02 cmake_install.cmake
-rw-rw-r-- 1 ameya ameya   84 Jun 18 20:02 install_manifest.txt
-rwxrwxr-x 1 ameya ameya 6808 Jun 18 20:02 libMathLibs.so
-rw-rw-r-- 1 ameya ameya 7748 Jun 18 20:02 Makefile
drwxrwxr-x 3 ameya ameya 4096 Jun 18 20:02 test

安装后可执行权限消失。 这是安装文件夹位置:

-rw-r--r-- 1 ameya ameya 6808 Jun 18 20:02 libMathLibs.so

我在 CMakeLists.txt 中缺少什么来更正这个问题?

CMake 没有在 installed 库上设置执行权限,因为 on Linux 库不需要可执行.

至于库在build树中的权限,这些不是由CMake设置的,而是由链接器设置的。

如果出于某种原因需要已安装库的可执行权限,请使用 install() 命令中的 PERMISSIONS 选项。

在网上查找更多详细信息后,我发现 CMake 错误报告中引用了 this

共享库在不同系统上的处理方式不同我尝试使用 Ubuntu 和 Fedora 工作站。
在 Ubuntu 系统上,系统安装的共享库没有设置可执行位,但在 Fedora Workstation 上,相同的库设置了可执行位。

可以看看 ${CMAKE_ROOT}/cmake/Modules/Platform/Linux.cmake, 其中定义了 CMAKE_INSTALL_SO_NO_EXE 宏(抱歉我之前回复中的错别字)。