makefile中“${MODS:%=%.beam}”是什么含义?

2025-03-10 04:49:56
推荐回答(1个)
回答1:

1. ${MODS:%=%.beam} 是Makefile 变量替换的一种方式.
其格式是 $(var:%.c=%.o)或${var:.c=.o},其意思是把.c 为结尾的变量替换成.o
2. %则代表任意匹配之外的字符串.
实例:

source:main.c onvif.c
object:$(var:%.c=%.o)


这个时候 %分别等于 main 与 onvif
而 object 则等于 main.o 与 onvif.o

注意:

在楼主的例子中${MODS:%=%.beam}
第一个%没有带任何过滤条件.%则表示任意字符串.
第二个%表示在字符串后面添加一个 .beam
${MODS:%=%.beam} 的意思是把为变量添加一个 .beam 后缀

makefile——小例子:

《Erlang程序设计》第六章中的例子:

    hello.erl
    -module(hello).
    -export([start/0]).
    start() ->
      io:format("Hello world ~n").
    shop.erl
    -module(shop).
    -export([cost/1]).
    cost(oranges) ->
    5;
    cost(newspaper) ->
    8;
    cost(apples) ->
    2;
    cost(pears) ->
    9;
    cost(milk) ->
    7.
    makefile
    .SUFFIXES: .erl .beam
    .erl.beam:
    erlc -W $<
    ERL = erl -boot start_clean
    MODS = hello shop
       
    all: compile
       
    compile: ${MODS:%=%.beam}
    @echo "make clean - clean up"
    clean:
    rm -rf *.beam erl_crash.dump

    编译成功,会出现hello.beam和shop.beam。