installation - 如何在 CMake 时找到正确的 ZSH $fpath(Linux 发行版差异)?
问题描述
情况
软件作者想将 zsh 补全添加到他的项目中。已编写完成脚本,作品。
需要弄清楚在哪里$CMAKE_INSTALL_PREFIX
安装,以便默认找到它。
问题
针对 Ubuntu 20.04 测试 Fedora 34,发现唯一的共同成员$fpath
是 /usr/local/share/zsh/site-functions;/usr/share fpath 都没有重叠。特别是,Ubuntu 不读取/usr/share/zsh/site-functions。
所以,我不能只安装到$CMAKE_INSTALL_PREFIX/share/zsh/site-functions
中,因为这只适用于$CMAKE_INSTALL_PREFIX==/usr/local
,但不适用于以后的打包 ( $CMAKE_INSTALL_PREFIX==/usr
)。我认为这是 Ubuntu 的不一致,但这实际上并不重要。
问题
有没有一种明智的方法可以在 CMake 时确定将完成脚本放在哪里?
请注意,CMake通常不从 zsh 运行,因此检查$fpath
不是一种选择。
解决方案
$CMAKE_INSTALL_PREFIX/share/zsh/site-functions
是正确的地方。
手册页、信息页、pkg-config 路径、二进制文件和库以及其他任何内容都是如此。在默认安装中, man 只会查看预定义的位置,例如/usr/share/man
和/usr/local/share/man
。
如果有人决定安装到/opt/gnuradio
或其他任何东西,那么他们也有责任确保他们设置$PATH
,$MANPATH
$INFOPATH
以及相应的其他任何东西。对于$fpath
. 最好的软件可以做的是确保它们遵守既定的约定,而不是在$PREFIX
.
如果 Ubuntu 想变得聪明并发明自己的vendor-completion
目录,那么结果就是他们需要修补他们打包的所有内容,包括 zsh 完成。那是他们的问题,因为他们为自己制造了问题。
推荐阅读
- ruby-on-rails - 使用 ie get 方法而不是通过单击按钮执行操作是否存在真正的问题
- javascript - 如何使 .hover() 在触摸设备上用滑动手指工作?
- php - Codeigniter ical 事件未在 gmail 上发送 - 无法加载事件数据或获取文本
- python - 如何从 KDTree 并行化 SciPy 稀疏距离矩阵?
- wordpress - 如何在 WordPress ACF 扩展块类型 GUI 中排队资产
- c# - 填充列表的二维矩阵
来自 csv - ios - 如何使用 Storyboard 实现红色视图的水平滚动动画?
- python - 找到离给定点最近的多边形
- flutter - PageController 在发布模式下不工作
- python - 如何对 PrimaryKeyRelatedField 序列化程序进行验证