应该如何安装手册页?

era*_*man 7 man make

在分发自定义实用程序时,我通常会编写一个/usr/local默认情况下安装二进制文件的 makefile

PREFIX ?= /usr/local
MANPREFIX ?= ${PREFIX}/man

install:
    install utility ${PREFIX}/bin/
    install utility.1 ${MANPREFIX}/man1/
Run Code Online (Sandbox Code Playgroud)

本地二进制文件的路径在不同平台上是相当标准的,但 man 路径不是

  • Linux:/usr/local/share/man/usr/local/man
  • 苹果系统 - /usr/local/share/man
  • BSD: /usr/local/man

有没有一种可移植的方式来编写这个 makefile?期望用户在安装之前将MANPREFIX 设置为正确的路径似乎是不合理的。

编辑:

BSD 使用 支持分配 shell 命令!=,可用于测试路径是否存在

SHARE != [ -d ${PREFIX}/share/man ] && echo /share || true
MANPREFIX ?= ${PREFIX}${SHARE}/man
Run Code Online (Sandbox Code Playgroud)

这是GNU make 的一个新特性,所以它可能还不能移植。这适用于 GNU make,但不适用于 BSD make:

MANPREFIX ?= $(shell [ -d ${PREFIX}/share/man ] && echo ${PREFIX}/share/man || echo ${PREFIX}/man)
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 4

教科书的答案是使用autoconf。在每个平台上找到正确的安装目录是其工作的一部分。

Autoconf 并不完美,但它通常比重新发明轮子要好。