2013-05-27 34 views
12

Tôi có một danh sách các tên tập tin:Làm thế nào để loại bỏ các phần mở rộng khác nhau khỏi danh sách từ trong GNU?

FILES := a.b c.d e.f 

và tôi muốn loại bỏ các phần mở rộng (hậu tố) của tất cả các từ để có được:

a c e 

cách tốt nhất để làm điều đó là gì?

Điều tốt nhất tôi có thể đưa ra được "gian lận" với vỏ:

$(shell for f in $(INS_NODIR); do echo -n "$${f%.*} "; done) 

nhưng tôi ngạc nhiên là không có một nhiều hơn "xây dựng trong" cách để làm điều này chỉ với make built-in chức năng .

điều tôi đã cố gắng:

  • patsubst. Dường như nó chỉ có thể có một ký tự đại diện duy nhất, một số khác được xử lý theo nghĩa đen và tôi muốn thực hiện một cái gì đó như %.%, %

  • tìm kiếm hàm notsufix.

    Tôi rất ngạc nhiên rằng điều này không tồn tại, kể từ khi dir chức năng có notdir đối tác, nhưng suffix chức năng mà chính xác chiết xuất mở rộng không có một đối tác notsuffix

Trả lời

21

đơn giản, chỉ cần:

NAMES = $(basename $(FILES)) 

Xem phần hướng dẫn của GNU trên Functions for File Names

+0

tnx ... I đã nhìn thấy trang đó, lướt qua tất cả các chức năng, nhưng tôi cho rằng 'basename' sẽ làm giống như tiện ích POSIX (để lại bất kỳ cái gì đến sau'/') và đó là ý tưởng định nghĩa phổ biến nhất mà bạn nghĩ đến cho basename hôm nay –

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