Trang man nên được cài đặt như thế nào?


7

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/localtheo 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/manhoặ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)

Câu trả lời:


4

Câu trả lời của sách giáo khoa là sử dụng autoconf . Tìm các thư mục cài đặt phù hợp trên mọi nền tảng là một phần công việc của nó.

Autoconf không hoàn hảo, nhưng nó thường tốt hơn là phát minh lại bánh xe.


Điều gì về các tiện ích không yêu cầu bước biên dịch, như bộ sưu tập các tập lệnh? Bạn vẫn sẽ đề nghị sử dụng Makefile trong trường hợp đó chứ?
Jorge Bucaran

@JorgeBucaran Bạn có thể muốn có một mục tiêu cài đặt ngay cả khi không có bước xây dựng và dù sao bạn cũng có thể có các mục tiêu thử nghiệm. Nếu bạn không kiểm tra, bạn hoàn toàn không thể có tệp tạo tệp (hoặc tương đương) và chỉ dựa vào các tập lệnh dành riêng cho bao bì (debian / quy tắc, thông số RPM, cổng BSD, v.v.).
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.