Làm cách nào để sử dụng $(MAKEFLAGS)
(hoặc một cách khác để truyền các biến được xác định trên dòng lệnh để tạo con) theo cách hỗ trợ gọi từ shell với cả make VAR=val
và make -args
?
Tôi cần các cấu hình con của mình có thể định cấu hình, nhưng tôi ghét các autotools, vì vậy tôi đang sử dụng các biến thực hiện cho điều này, ví dụ: gọi từ shell:
$ make USE_SSE3=1
và USE_SSE3
cần áp dụng cho tất cả các bản dựng trong tất cả các tệp phụ.
The manual khẳng định rằng:
nếu bạn ‘làm -ks’ sau đó MAKEFLAGS được giá trị ‘ks’.
Vì vậy, tôi đang sử dụng -$(MAKEFLAGS)
(có tiền tố dấu gạch ngang) trong Makefile của tôi.
Tuy nhiên, mở rộng thành đối số không hợp lệ khi các biến không có cờ được sử dụng. Nếu tôi chạy:
$ make FOO=bar
thì phụ trang không hợp lệ -FOO=bar
. OTOH không có định nghĩa biến tiền tố dấu gạch ngang hoạt động, sau đó là make -s
, v.v.
Có cú pháp/biến/hack làm cho việc chuyển các đối số và các định nghĩa biến duy nhất hoạt động với các tệp phụ makefiles không?
Di sản $(MKFLAGS)
không có vấn đề tiền tố dấu gạch ngang lạ, nhưng nó cũng không bao gồm các định nghĩa biến. Tôi đã cố gắng sửa biến với $(patsubst)
, nhưng điều đó chỉ làm mọi thứ tồi tệ hơn bằng cách cắt bớt khoảng trắng.
Tôi cần giải pháp tương thích với GNU lỗi thời 3.81 được chuyển bằng Mac OS X Mavericks.
foo:
$(MAKE) -C subproject -$(MAKEFLAGS)
$ make foo -s # MAKEFLAGS = 's'
$ make foo BAR=baz # MAKEFLAGS = 'BAR=baz'
$ make foo -j8 # MAKEFLAGS = ' --job-server=…'
Điều này dường như làm việc mà không bất kỳ nỗ lực đặc biệt. Hãy thử 'foo: $ (MAKE) bar' và' bar: echo flag là $ (MAKEFLAGS), BAR là $ (BAR) '. – Beta