2011-01-24 39 views
13

Có thể chèn một dòng mới để được thực thi trong vòng foreach trong một Makefile không?Thêm dòng mới vào vòng lặp Makefile 'foreach'

Hiện nay, tôi có như sau:

$(foreach my_lib,$(MY_LIBS),$(call my_func,results,boxer,$(my_lib))) 

Bây giờ, giả sử rằng tôi có:

MY_LIBS = lib1 \ 
      lib2 

Các foreach vòng lặp trên sẽ đánh giá để:

lib1 lib2 

Tôi muốn này để đánh giá:

lib1 
lib2 

Có thể chèn một dòng mới trong vòng lặp foreach để thực hiện việc này không?

Cảm ơn bạn.

+2

Thời gian ngớ ngẩn Q: tại sao bạn cần dòng mới? –

+0

Trong Makefile thực tế của tôi, "m_func" mở rộng "lib1" và "lib2" thành lệnh "make ... lib". Do đó, nếu dòng được đánh giá là "make ... lib1 make ... lib2", thì việc thực hiện không thành công. – DuneBug

Trả lời

25
define \n 


endef 

$(error Here is a message${\n}with embedded${\n}newlines.${\n}${\n}hooray!) 

Bạn có thể sử dụng ${\n} ở những thứ như $(subst...).

+1

Điều này giải quyết được vấn đề của tôi. Cảm ơn! – DuneBug

0

Bạn có thể làm điều này bằng cách sử dụng

define MY_LIBS 
lib1 
lib2 
endef 

Trong những trường hợp phức tạp hơn, nơi bạn muốn tạo ra các lệnh makefile multiline từ vòng lặp, bạn sẽ cần phải sử dụng eval chức năng.

+1

Thật không may, macro MY_LIBS được xác định trên nhiều Makefiles được bao gồm trong một Makefile gốc. Chúng tôi thêm vào macro MY_LIBS với "+ =" trong Makefiles được bao gồm. Vì vậy, tôi không nghĩ rằng "xác định" và "endef" sẽ làm việc cho tôi. Tôi có thể tìm hiểu thêm về cách sử dụng "eval" để giải quyết vấn đề này. – DuneBug

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