Makefile静态模式

静态模式可以灵活定义多目标的规则。


语法

    <targets...><targets-pattern>:<prereq-patterns...>
    <commands>
    ...
  • targets表示目标集合。
  • target-parrtern表示目标的模式选择。
  • prereq-parrterns表示目标的依赖模式。

例子

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


等价于

    foo.o:foo.c
    $(CC) -c $(CFLAGS) foo.c -o foo.o
    bar.o:bar.c
    $(CC) -c $(CFLAGS) bar.c -o bar.o
  • 目标来自于$objects
  • <targets-pattern>为%.o,意思是targets也就是例子中的objects都是以.o结尾的,<prereq-patterns>为%.c,意思是去掉<targets-pattern>的结尾.o,保持%,并加上.c,形成新的%.c结尾的新集合。
  • %.o表示所有以.o结尾的模板,例子中的foo.o和bar.o,依赖模式%.c取自模式中的%,本例中是foo和bar,加上.c后缀,形成foo.c和bar.c。 
  • $<是自动化变量,表示所有的依赖目标集合。

例子:

files = foo.elc bar.o lose.o
    $(filter %.o $(files)):%.o:%.c
    $(CC) -c $(CFLAGS) $< -o $@

    $(filter %.o,$(files))表示调用 Makefile filter 函数,过滤“$filter”集,只保留其中模式为“%.o”的内容。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Makefile中将源代码编译成静态库,你需要定义适当的规则来编译源文件并将其打包成静态库文件。以下是一个示例Makefile,演示如何将源代码编译成静态库: ```makefile CC = g++ CFLAGS = -Wall -g # 静态库名称 LIBRARY = libmylibrary.a # 源文件 SRCS = file1.cpp file2.cpp # 目标文件 OBJS = $(SRCS:.cpp=.o) all: $(LIBRARY) $(LIBRARY): $(OBJS) ar rcs $@ $^ %.o: %.cpp $(CC) $(CFLAGS) -c -o $@ $< clean: rm -f $(OBJS) $(LIBRARY) ``` 在上面的示例中,`CC`变量定义了使用的编译器(这里使用`g++`),`CFLAGS`定义了编译选项(例如`-Wall`和`-g`)。 `LIBRARY`变量定义了最终生成的静态库的名称,`SRCS`变量定义了源文件的名称。 `OBJS`变量是由源文件生成的目标文件的列表。 在上述示例中,我们定义了一个名为`all`的目标,它依赖于`$(LIBRARY)`。通过运行`make all`命令,将会编译源文件并生成静态库文件。 在编译步骤中,我们使用了模式规则来生成目标文件(`%.o`)。通过运行`$(CC)`编译器并使用`-c`选项编译源文件,并将结果输出到目标文件中。 在链接步骤中,我们使用了`ar`命令将所有目标文件打包成静态库。`-rcs`选项用于创建库文件,`$@`表示目标文件(`$(LIBRARY)`),`$^`表示所有的依赖文件(目标文件)。 最后,我们定义了一个名为`clean`的目标,用于删除生成的目标文件和静态库文件。 你可以根据实际情况修改Makefile中的路径和名称,以适应你的项目。运行`make`命令将会编译源代码并生成静态库文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雲烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值