首页 > 解决方案 > 如何在 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不是一种选择。

标签: installationcmakezshtab-completion

解决方案


$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 完成。那是他们的问题,因为他们为自己制造了问题。


推荐阅读