如何在 CMake 时找到正确的 ZSH $fpath(Linux 发行版差异)?
How to find the right ZSH $fpath at CMake time (Linux distro differences)?
情况
软件作者想在他的项目中添加 zsh 补全。 Has written completion script,有效。
需要找出 $CMAKE_INSTALL_PREFIX
下的安装位置,以便默认找到它。
问题
针对Ubuntu 20.04测试Fedora 34,发现$fpath
唯一的公共成员是/usr/local/share/zsh/site-functions; none 的 /usr/share fpaths 重叠。特别是,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 完成。那是他们的问题,因为他们为自己制造了问题。
情况
软件作者想在他的项目中添加 zsh 补全。 Has written completion script,有效。
需要找出 $CMAKE_INSTALL_PREFIX
下的安装位置,以便默认找到它。
问题
针对Ubuntu 20.04测试Fedora 34,发现$fpath
唯一的公共成员是/usr/local/share/zsh/site-functions; none 的 /usr/share fpaths 重叠。特别是,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 完成。那是他们的问题,因为他们为自己制造了问题。