2010-04-30 30 views
45

Một biến trở MINGW32_NT-5.1 hoặc CYGWIN_NT-5.1. (yea, dấu chấm ở cuối)Makefile: chứa chuỗi

Cần phải so sánh rằng var được chứa NT-5.1 vị trí bất cứ nơi nào.

Sử dụng Cygwin và muốn tương thích với khá nhiều bất kỳ * nix nào.

Trả lời

75

Chức năng findstring là gì trái tim mình mong muốn:

$(findstringtìm,trong)

kiếm trong cho một sự xuất hiện của tìm. Nếu nó xảy ra, giá trị là tìm; nếu không, giá trị sẽ trống. Bạn có thể sử dụng hàm này trong một điều kiện để kiểm tra sự hiện diện của một chuỗi con cụ thể trong một chuỗi đã cho. Như vậy, hai ví dụ,

$(findstring a,a b c) 
$(findstring a,b c) 

sản xuất các giá trị "a""" (chuỗi rỗng), tương ứng. Xem Testing Flags, để có một ứng dụng thực tế của findstring.

Cái gì như:

ifneq (,$(findstring NT-5.1,$(VARIABLE))) 
    # Found 
else 
    # Not found 
endif 
+1

Tuyệt vời, chính xác những gì tôi muốn. Chỉ một câu hỏi - dấu phẩy ở đây cho 'ifneq (, $ (...' – Pablo

+3

Phân tích cú pháp nó thành 'ifneq (A, B)' trong đó A là chuỗi rỗng và B là '$ (findstring ...)' Nó có vẻ kỳ lạ bởi vì bạn không trích dẫn chuỗi trong Makefiles –

+1

Trường hợp 'chuỗi tìm kiếm' có nhạy cảm không? Nếu có, có cách nào đơn giản để làm khớp không phân biệt chữ hoa chữ thường? Tài liệu không rõ ràng ... –

11
VARIABLE=NT-5.1_Can_be_any_string 
ifeq ($(findstring NT-5.1,$(VARIABLE)),NT-5.1) 
    # Found 
    RESULT=found 
else 
    # Not found 
    RESULT=notfound 
endif 

all: 
    @echo "RESULT=${RESULT} , output=$(findstring NT-5.1,$(VARIABLE))" 

Nó phù hợp với chuỗi cho trước và trả

+4

và đọc tốt hơn câu trả lời được chấp nhận, IMO. –