使用CMake自动安装依赖项
一旦CMake成功构建了一个需要一些共享库的可执行文件,通过使用“ldd”,我们就可以很容易地获得共享库依赖项的列表以及在哪里可以找到它们 例如,使用CMake自动安装依赖项,cmake,installation,Cmake,Installation,一旦CMake成功构建了一个需要一些共享库的可执行文件,通过使用“ldd”,我们就可以很容易地获得共享库依赖项的列表以及在哪里可以找到它们 例如,libstdc++在这里:/usr/lib64/libstdc++.so.6 现在我们想要制作一个包(例如包),毫无疑问,我们需要包含那些共享库 我们可以做到: set(DEPENDENCIES /usr/lib64/libstdc++.so.6 /usr/lib64/[libname2] /usr/lib64/[libname3]) foreach(
libstdc++
在这里:/usr/lib64/libstdc++.so.6
现在我们想要制作一个包(例如包),毫无疑问,我们需要包含那些共享库
我们可以做到:
set(DEPENDENCIES /usr/lib64/libstdc++.so.6 /usr/lib64/[libname2] /usr/lib64/[libname3])
foreach(DEPENDENCY ${DEPENDENCIES})
install(PROGRAMS "${DEPENDENCY}" DESTINATION lib)
endforeach()
有没有更聪明的方法来达到同样的目的
我们可以不手动指定所有库的路径,而是让它成为一个自动过程吗?鉴于CMake已经知道链接阶段中的所有依赖项和相应的库路径,是否应该简单明了?安装3d party共享库(如
libstdc++
)不是软件包通常做的事情。相反,软件包假定这些库已经安装,并且只安装由项目本身创建的库。所以,您的意图似乎不好。有时,尤其是对于系统库,CMake不给出或不知道库的路径。它故意让链接器选择正确的链接器。对于您示例中的共享库,我共享@Tsyvarev关注点。一般来说,您可以使用宏来获取安装依赖项。有关更多详细信息,请参见例如。