【问题标题】:Makefile static rule syntax explainationMakefile 静态规则语法解释
【发布时间】:2015-01-18 06:35:49
【问题描述】:

这是静态规则的makefile代码示例的sn-p:

objects = foo.o bar.o

all: $(objects)

$(objects): %.o: %.c
        $(CC) -c $(CFLAGS) $< -o $@

这是什么意思:

target : %.o : %.c

这是否意味着 target : %.o 和 %.o : %.c 解释了目标的所有依赖项都将由 %.o 规则生成,并且配方应用于该规则以及 % 的所有依赖项。 o 将由 %.c 规则生成并应用配方?

请有人澄清一下:

1.makefile中有哪些静态规则解释语法?

2.配方是否同时适用于 %.o 和 %.c 规则?

3.target : $(all).o$(all).o : $(all).c 的连接是否在 all 包含所有没有任何扩展名的文件名?

【问题讨论】:

    标签: makefile


    【解决方案1】:

    你的sn-p:

    objects = foo.o bar.o
    
    all: $(objects)
    
    $(objects): %.o: %.c
            $(CC) -c $(CFLAGS) $< -o $@
    

    展开为(展开变量后):

    all: foo.o bar.o
    
    foo.o bar.o: %.o: %.c
            $(CC) -c $(CFLAGS) $< -o $@
    

    这是写作的简写:

    foo.o: foo.c
            $(CC) -c $(CFLAGS) $< -o $@
    bar.o: bar.c
            $(CC) -c $(CFLAGS) $< -o $@
    

    因此,简而言之,为目标列表中的每个目标应用模式并为结果创建静态规则。

    【讨论】:

    • 你不能写run: $(objects): %.o: %.c。冒号太多了。静态模式规则恰好包含三个由冒号分隔的部分:目标名称列表、必须匹配每个目标名称的第一个模式,以及暗示先决条件的可选第二个模式。我不太明白你的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多