在Makefile中,"$(@:H)"是什么意思?

5

今天午餐时,我与一位实习同事交谈,他几乎整个夏季都在使用Makefile工作,他提到他不知道$(@:H)的含义或作用。我的谷歌搜索无果,找不到任何信息,希望你们能帮助我解决这个问题。


那是一个名为@:H的make变量,这不是我所知道的默认变量。因此,除非在某个地方定义,否则应该会扩展为空字符串。你确定这是你/他看到的语法吗?而不是$(@D)$(@:H=c)或类似的语法? - Etan Reisner
他声称那就是他看到的。如果这是一个非默认变量,我假设它已经在程序的其他地方定义了。我从未亲自接触过Make,所以我一点头绪都没有。 - Swammy
那将是一个笨拙的变量选择,因为它非常接近有效的变量使用。除非,当然,这不是GNU make而是其他一些含义。 - Etan Reisner
啊,看起来可能是BSD make。那里的“:H”修饰符“用除最后一个组件外的所有内容替换变量中的每个单词。” - Etan Reisner
我不确定他在使用哪个操作系统,但这很有道理,因为我知道这里的一些机器运行FreeBSD。 - Swammy
1个回答

3
假设这是GNU make,那么它只是(奇怪地命名的)@:H变量的扩展。它不是默认变量(也不是可以用正常赋值语法设置的变量),而且作为一个变量名的选择非常奇怪,因为它非常接近真实的变量扩展。
更有可能的是,这是指BSD make,其中:H是一个变量修饰符,它(摘自man页面):

:H

将变量中的每个单词替换为除最后一个组件外的所有内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接