Makefile 学习日记(三)——makefile的瘦身

10 篇文章 0 订阅
5 篇文章 0 订阅

还是先看例子:


原料:main.c printfun.c methed.c 及其.h文件
//main.c

#include "main.h"
void main()
{
        print_f();
        printf("\n%d+%d=%d\n",1,4,addfun(1,4));
}

//main.h

#include "stdio.h"
#include "printfun.h"
#include "methed.h"

//printfun.c

#include "printfun.h"
void print_f()
{
    printf("\nwelcom to learn Makefile!\n");
}

//printfun.h

#include "stdio.h"
void print_f();

//methed.c

#include "methed.h"
int addfun(int a,int b)
{
    return a+b;
}
int minusfun(int a,int b)
{
       return a-b;
}

//methed.h

int addfun(int a,int b);
int minusfun(int a,int b);

Makefile文件:

main:main.o printfun.o methed.o
        gcc -o main  *.o
clearn:
        rm -rf -v *.o main

test:
        echo "test"

运行结果:

[root@bogon c3]# make
cc    -c -o main.o main.c
cc    -c -o printfun.o printfun.c
cc    -c -o methed.o methed.c
gcc -o main  *.o

总结如下:
1,是不是发现我写的简单了?对,我把能省的都省了,我就是想看看我省掉【预置条件1,2,3】后,makefile会怎么办。结果很好,他都会自己对响应的文件进行编译。
2,【cmd1】我使用了*.o,用这个的时候还出现过一点问题?
能不能在【预置条件1,2,3】里使用呢?答案是不能的。


修改后的Makefile:

main:*.o
        gcc -o main  main.o printfun.o methed.o
clearn:
        rm -rf -v *.o main

test:
        echo "test"

运行结果:

[root@bogon c3]# make
cc    -c -o *.o printfun.c
gcc -o main  main.o printfun.o methed.o
gcc: error: main.o: No such file or directory
gcc: error: printfun.o: No such file or directory
gcc: error: methed.o: No such file or directory
gcc: fatal error: no input files
compilation terminated.
make: *** [main] Error 4

3,从打印结果看cc -c -o *.o printfun.c
*.o是被当做-o输出的,也就是 *.o被整体当做一个【伪目标】,而不是一个通配的值。经过其他实验发现每次都是 printfun.c 再编译。需要高手解释下啊。
4,我们可以看到假设我们的c文件越来越多,我们要写的【预置条件1,2,3,4….】也要越多。不合理啊。。。所以一定有方法让我们简化写makefile的途径
5,其实已经有一个途径了,如在【cmd命令】中使用通配符*,但是千万要注意通配符不能乱用,否则就会导致上面例子的错误。
6,那么既然我们写的不对Makefile就进行不下去,也就是说Makefile与其他的很多东西一样是有规则要求的。
所以为了更快的写Makefile,明天开始研究Makefile中的语法及规则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值