makefile 中 $@ $^ %< ar rz使用

1.源程序的编译

假设我们有如下程序

/* main*/

#include <stdio.h>
#include "test1.h"
#include "test2.h"
void main()
{
    test1();
    test2();
    printf("main\n");
}
/*test1*/
#include <stdio.h>
void test1()
{
    printf("test1\n");
}
/*test2*/
#include <stdio.h>
void test1()
{
    printf("test1\n");
}

程序可以这么编译:

gcc -c test1.c
gcc -c test2.c
gcc -c main.c
gcc -o test main.o test1.o test2.o

如果有上百个源程序,编译就比较麻烦,为此发明了makefile.

2.Makefile

test: main.o test1.o test2.o

        gcc -o test main.o test1.o test2.o

main.o: main.c test1.c test2.c

        gcc -c main.c

test1.o: test1.c test1.h

        gcc -c test1.c

test2.o: test2.c test2.h

        gcc -c test2.c

Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是:

$@–目标文件,$^–所有的依赖文件,$<–第一个依赖文件。

如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为:

test: main.o test1.o test2.o

        gcc -o $@ $^

main.o: main.c test1.c test2.c

        gcc -c $<

test1.o: test1.c test1.h

        gcc -c $<

test2.o: test2.c test2.h

        gcc -c $<

也可以最终简化为这样:

test: main.o test1.o test2.o

        gcc -o $@ $^

.c.o:

        gcc -c $<

这个规则表示所有的 .o文件都是依赖与相应的.c文件的。

AR = ar rc —–生成静态库文件命令

test.a: test1.o test2.o
        ar rc test.a test1.o test2.o
test: main.o test1.o test2.o
        gcc -o $@ $^
.c.o:
        gcc -c $<
clean:
        rm -fr *.o *.a
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值