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

时间:2016-06-18 14:44:21

标签: permissions cmake install shared

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

这是我的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。

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

-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中缺少什么来纠正这个问题?

2 个答案:

答案 0 :(得分:1)

They said CMake没有为安装的库设置执行权限,因为Linux库上的不需要是可执行的

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

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

答案 1 :(得分:1)

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

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

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