2011-01-24 65 views
11

Tôi cần tạo Makefile và quy tắc phải có quy tắc run. Tuy nhiên, chạy yêu cầu một số tham số.Tham số cho quy tắc trong Makefile

Có ai có ý tưởng nào về cách tôi có thể chuyển đối số khi chạy quy tắc trong tệp Makefile không? Tôi muốn có thể chạy quy tắc run với các đối số bằng cách nhập make run foo bar.

tôi đã cố gắng này, nhưng nó đã không làm việc:

run: 
    make compile 
    ./scripts/runTrips $1 $2 $PLACES $OUT $VERS 

Các thông số tôi muốn cung cấp là người đầu tiên và thứ hai.

Trả lời

21

Khi chuyển các tham số cho lệnh thực hiện, hãy tham chiếu chúng như bạn sẽ tạo các biến nội bộ khác.

Nếu makefile của bạn trông giống như:

run: 
     script $(param1) $(param2) 

Bạn có thể gọi nó với cú pháp sau:

$> make run param1=20 param2=30 

và làm cho nên gọi kịch bản như:

script 20 30 
+1

nó thực sự hoạt động, nhưng tôi có thể làm cho nó chạy khi tôi viết: $> làm chạy (và không param1 = ....) – amit

+4

@amit gr: Không, một cái gì đó như 'làm chạy ' là không thể vì 'make' muốn diễn giải nó như một tên mục tiêu. Hãy xem xét ví dụ 'make all install': đầu tiên mục tiêu" all "được xử lý, sau đó là mục tiêu" install ". Mọi thứ mà bạn muốn trở thành một kiểu tham số phải được chuyển qua cú pháp 'key = value' (hoặc các biến môi trường có cùng tên). – DarkDust

2

Hãy tự không cung cấp các đối số chuyển tiếp như cho tập lệnh. Thông thường làm cho được sử dụng theo cách sau: bạn cấu hình dự án hơn là chạy đơn giản 'make'. Cấu hình có thể được thực hiện bằng cách chạy shell script 'configure'. Tập lệnh này là tập lệnh mà bạn có thể chuyển tham số đến. Ví dụ:

./configure param1 param2 
make run 

định cấu hình tập lệnh phải phân tích tham số và ghi chúng vào config.mk. config.mk phải chứa sau:

PARAM1 = val1 
PARAM2 = val2 

Makefile của bạn phải bao gồm config.mk:

TOP = . 
include $(TOP)/config.mk 

run: 
    make compile 
    ./scripts/runTrips $(PARAM1) $(PARAM2) $(PLACES) $(OUT) $(VERS) 

Trong 'cấu hình' kịch bản của bạn, bạn cũng có thể kiểm tra các thông số cho đúng đắn và thực hiện kiểm tra và tính toán khác.

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