2012-03-24 25 views
6
  • Utility: nmake
  • điều hành: Windows 7

Tôi đã sau Makefilenmake phụ thêm để biến

FILE = $(shell) *.c 
FILE += $(shell) *.cpp 

exec: 
    @echo $(FILE) 

này hoạt động hoàn toàn tốt đẹp với make. Điều này sẽ đưa ra lỗi sau với nmake

makefile(2) : fatal error U1036: syntax error : too many names to left of '=' 
Stop. 

Lý do có thể là gì?

Nếu không có dòng

FILE += $(shell) *.cpp 

nmake làm việc hoàn toàn tốt đẹp.

Trả lời

5

Cú pháp += là một phần mở rộng GNU Make được đi tiên phong trong số make của Sun vào cuối những năm 80. Nó không phải là một phần của cú pháp cho tiêu chuẩn POSIX make hoặc bản gốc AT & T make.

Nếu bạn sử dụng tiện ích, bạn sẽ bị phát hiện khi chuyển sang hệ thống không hỗ trợ chúng. Bạn phải làm lại những thứ (cứng) hoặc gắn bó với hệ thống ban đầu.


Một cách để sửa đổi các tập tin để làm việc với nmake có lẽ là:

FILE1 = $(shell) *.c 
FILE2 = $(shell) *.cpp 
FILE = $(FILE1) $(FILE2) 

exec: 
    @echo $(FILE) 

Hoặc, cho rằng vĩ mô shell không được định nghĩa, thậm chí:

FILE1 = *.c 
FILE2 = *.cpp 
FILE = $(FILE1) $(FILE2) 

exec: 
    @echo $(FILE) 
2

Thay vì

FILE = $(shell) *.c 
FILE += $(shell) *.cpp 

bạn phải sử dụng

FILE = $(shell) *.c 
FILE = $(shell) *.cpp $(FILE) 

Chiến lược mở rộng khác với nmake và make. nmake mở rộng tất cả trước khi bắt đầu đánh giá các quy tắc trong khi thực hiện nó chỉ trong thời gian khi cần thiết và bởi vì điều này cho các vấn đề nó có hai hương vị mở rộng như được mô tả trong các trang thông tin.

Cá nhân tôi thích cách của nmake tốt hơn. Và bằng cách này, hãy sử dụng "jom" thay vì "nmake".

+0

Dòng cuối cùng có thể dẫn đến lỗi 'macro đệ quy'. –

+1

Không, không. – Lothar

Các vấn đề liên quan