Khi phân phối một tiện ích tùy chỉnh, thông thường tôi sẽ viết một tệp thực hiện cài đặt nhị phân /usr/local
theo mặc định
PREFIX ?= /usr/local
MANPREFIX ?= ${PREFIX}/man
install:
install utility ${PREFIX}/bin/
install utility.1 ${MANPREFIX}/man1/
Đường dẫn đến nhị phân cục bộ khá chuẩn trên các nền tảng khác nhau, nhưng đường dẫn không phải là đường dẫn
- Linux:
/usr/local/share/man
hoặc/usr/local/man
- Hệ điều hành Mac -
/usr/local/share/man
- BSD:
/usr/local/man
Có một cách di động để viết makefile này? Có vẻ không hợp lý khi mong đợi người dùng đặt MANPREFIX theo đúng đường dẫn trước khi cài đặt.
BIÊN TẬP:
BSD thực hiện gán hỗ trợ cho một lệnh shell bằng cách sử dụng !=
, có thể được sử dụng để kiểm tra nếu một đường dẫn tồn tại
SHARE != [ -d ${PREFIX}/share/man ] && echo /share || true
MANPREFIX ?= ${PREFIX}${SHARE}/man
Đây là một tính năng mới cho GNU make , vì vậy nó có thể chưa có khả năng di động. Điều này hoạt động trong GNU make, nhưng BSD không tạo ra:
MANPREFIX ?= $(shell [ -d ${PREFIX}/share/man ] && echo ${PREFIX}/share/man || echo ${PREFIX}/man)