/usr/local
分发自定义实用程序时,我通常会编写一个默认安装二进制文件的 makefile
PREFIX ?= /usr/local
MANPREFIX ?= ${PREFIX}/man
install:
install utility ${PREFIX}/bin/
install utility.1 ${MANPREFIX}/man1/
本地二进制文件的路径在不同平台上是相当标准的,但 man 路径却不是
- Linux:
/usr/local/share/man
或/usr/local/man
- 苹果系统 -
/usr/local/share/man
- BSD:
/usr/local/man
有没有一种可移植的方式来编写这个makefile?期望用户在安装之前将 MANPREFIX 设置为正确的路径似乎不合理。
编辑:
BSD make 支持使用 指定 shell 命令!=
,可用于测试路径是否存在
SHARE != [ -d ${PREFIX}/share/man ] && echo /share || true
MANPREFIX ?= ${PREFIX}${SHARE}/man
这是一个GNU make 的新功能,所以它可能还不能移植。这适用于 GNU make,但不适用于 BSD make:
MANPREFIX ?= $(shell [ -d ${PREFIX}/share/man ] && echo ${PREFIX}/share/man || echo ${PREFIX}/man)
答案1
教科书的答案是使用自动配置。在每个平台上找到正确的安装目录是其工作的一部分。
Autoconf 并不完美,但它通常比重新发明轮子要好。