使用CPack制作Debian包时如何添加ld.so.conf.d路径配置文件
实现方案
直接将ld配置文件作为软件包的内置安装文件,由dpkg管控生命周期,安装时自动部署到目标路径,卸载时自动删除,无需使用后置安装脚本。
具体操作步骤
1. 生成配置文件
你可以直接在CMakeLists.txt中生成内容为/opt/interfaces/lib的配置文件,无需额外创建模板文件:
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/interfaceslibs.conf "/opt/interfaces/lib\n")
如果你的安装前缀是通过CMAKE_INSTALL_PREFIX设置为/opt/interfaces,也可以用更通用的写法:
configure_file( interfaceslibs.conf.in ${CMAKE_CURRENT_BINARY_DIR}/interfaceslibs.conf @ONLY )
同时在源码目录创建interfaceslibs.conf.in文件,内容为:
@CMAKE_INSTALL_PREFIX@/lib
2. 声明配置文件的安装规则
通过CMake的install指令将配置文件安装到系统/etc/ld.so.conf.d目录,dpkg会自动记录该文件属于你的软件包:
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/interfaceslibs.conf DESTINATION /etc/ld.so.conf.d PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ )
3. 配置自动执行ldconfig
遵循Debian包规范,通过包触发机制自动在安装、卸载后执行ldconfig更新库缓存,无需自定义脚本:
首先在源码目录创建triggers文件,内容为:
activate-noawait ldconfig
然后在CMakeLists.txt中添加CPack配置:
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/triggers" )
效果验证
打包完成后执行dpkg -c 你的安装包名.deb,如果输出列表中包含/etc/ld.so.conf.d/interfaceslibs.conf则配置生效。
卸载软件包时dpkg会自动删除该配置文件,同时自动触发ldconfig清理无效的库缓存。
内容的提问来源于stack exchange,提问作者BhanuKiran
相关产品推荐
相关产品推荐

