Makefile 如何在GNU make中从单词列表中删除多个不同的扩展名?

Makefile 如何在GNU make中从单词列表中删除多个不同的扩展名?,makefile,Makefile,我有一个文件名列表: FILES := a.b c.d e.f 我想删除所有单词的扩展名(后缀),以获得: a c e 最好的方法是什么 我能想到的最好的办法就是用shell“作弊”: $(shell for f in $(INS_NODIR); do echo -n "$${f%.*} "; done ) 但我感到惊讶的是,没有一种更为“内置”的方法只使用make内置函数来实现这一点 我试过的事情: patsubst。似乎它只能有一个通配符,其他通配符按字面意思处理,我想做一些类似.%

我有一个文件名列表:

FILES := a.b c.d e.f
我想删除所有单词的扩展名(后缀),以获得:

a c e
最好的方法是什么

我能想到的最好的办法就是用shell“作弊”:

$(shell for f in $(INS_NODIR); do echo -n "$${f%.*} "; done )
但我感到惊讶的是,没有一种更为“内置”的方法只使用make内置函数来实现这一点

我试过的事情:

  • patsubst
    。似乎它只能有一个通配符,其他通配符按字面意思处理,我想做一些类似
    .%、%%

  • 正在查找
    notsufix
    函数

    我感到惊讶的是,这并不存在,因为
    dir
    函数有
    notdir
    对应项,但是准确提取扩展名的
    后缀
    函数没有
    notsuffix
    对应项

    • 简单,只是:

      NAMES = $(basename $(FILES))
      

      请参阅GNU make手册中的

      tnx。。。我曾看过该页面,浏览了所有函数,但我认为
      basename
      将与POSIX实用程序做相同的事情(保留最后一个
      /
      之后的内容),这是basename今天想到的最常见的定义思想