目前我正在创建一个安装实用程序共享库的简单项目。
这是我的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中缺少什么来纠正这个问题?
答案 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宏(对于我之前的回复中的拼写错误,抱歉)。