2010-02-17 17 views
21

Làm thế nào tương tự/khác nhau là gnu thực hiện, microsoft nmake và tiêu chuẩn posix thực hiện?Làm thế nào tương tự/khác nhau là gnu thực hiện, microsoft nmake và tiêu chuẩn posix thực hiện?

Rõ ràng có những thứ như "hệ điều hành nào?", "Trình biên dịch nào?" và "liên kết nào?", nhưng tôi đang đề cập cụ thể đến cú pháp, ngữ nghĩa và tùy chọn dòng lệnh của chính các tệp makefiles.

Nếu tôi viết makefiles dựa trên hướng dẫn sử dụng để thực hiện gnu, các vấn đề về tính di động quan trọng nhất mà tôi cần lưu ý là gì?

+0

Liên quan: [Hạn chế GNU ‑ Thực hiện với POSIX Thực hiện hành vi @ Unix.SE] (http://unix.stackexchange.com/q/144424/50602) Đáng buồn thay dường như không có cách nào để đạt được điều đó, bạn chỉ có thể sử dụng mục tiêu đặc biệt '.POSIX' mà vẫn còn nhiều phần mở rộng được kích hoạt. – Palec

Trả lời

10

Làm cho và POSIX Chia sẻ một lõi chung để GNU Hãy hiểu các tập tin giả định dành cho POSIX Thực hiện và diễn giải chúng theo cùng một cách - với rất ít ngoại lệ. Tuy nhiên, nhiều GNU Makefiles sử dụng các tính năng chỉ có trong GNU Make. Đôi khi điều này là có chủ ý và ý thức; đôi khi nó không phải là (và "đôi khi không phải là" là một vấn đề). Tôi không quen thuộc với Microsoft nmake; Tôi tin rằng nó có khả năng gần gũi với các ngữ nghĩa POSIX Make ở cốt lõi của nó, nhưng nó sẽ có các phần mở rộng khác nhau của riêng nó.

Nói chung, những chương trình như tự động tạo sản phẩm gần với Makefiles di động.

Những điều chính cần lưu ý khi sử dụng GNU Make là tất cả các ký pháp hàm mở rộng để ánh xạ tên tệp (macro) thành các giá trị hữu ích. Trong khi họ chắc chắn là hữu ích, họ cũng là một cái bẫy cho tính di động.

Các '% .x' ký hiệu cho các quy tắc hậu tố không được định nghĩa bởi POSIX - họ được công nhận là một phần mở rộng phổ biến:

Việc giải thích các mục tiêu có chứa các ký tự '%''"' là thực hiện xác định.

+0

Tôi đã chạy vào aix làm cho chương trình vài lần. Kinh quá. Nó là đúng POSIX hoặc là nó cái gì khác tiêu chuẩn khôn ngoan? – Anycorn

+0

@unknown: nó khá gần với POSIX Make - một nơi nào đó giữa đó và một trong những hệ thống V làm cho các chương trình. POSIX Make là một tập hợp con phổ biến của các biến thể khác nhau. –

+2

Ngoài ra tùy chọn dòng lệnh (có liên quan đến biến 'MAKEFLAGS'), các mục tiêu đặc biệt (chữ hoa, bắt đầu bằng dấu chấm) và các quy tắc dựng sẵn thay đổi rất nhiều. Nhưng ví dụ: Mục tiêu đặc biệt '.PHONY' dường như được hỗ trợ ngay cả bên ngoài thế giới Gnu Make. Tôi nghĩ rằng cách an toàn duy nhất là kiểm tra makefiles của bạn. Nếu bạn muốn chơi nó an toàn, tuân thủ POSIX mặc dù nó xác định một thực hiện rất hạn chế. – Palec