Linux学习笔记(4)——Makefile的使用

  1. 建立C文件
    1.1 main.c主要用来调用相关的函数
#include <stdio.h>
#include "input.h"
#include "calc.h"

int main(int arg, char *argv[])
{
        int a, b;
        char c;

        input(&a, &c, &b);

        switch (c) {
                case '+':
                        printf("%d + %d = %d\r\n", a, b, calc_add(a, b));
                        break;
                case '-':
                        printf("%d - %d = %d\r\n", a, b, calc_dec(a, b));
                        break;
                case '*':
                        printf("%d * %d = %d\r\n", a, b,  calc_mux(a, b));
                        break;
        }
        return 0;

}

1.2 input.c和input.h主要用来实现输入交互及相应声明

input.c
include <stdio.h>

void input(void *para1, void *para2, void *para3)
{
        printf("Please input a calcuate expression:");
        scanf("%d %c %d", (int *)para1, (char *)para2,  (int *)para3);
}

input.h
#ifndef __INPUT_H__
#define __INPUT_H__

void input(void *para1, void *para2, void *para3);

#endif

1.3 calc.c和calc.h主要用来实现几种简单的计算及相应声明

clac.c
#include <math.h>

int calc_add(int para1, int para2)
{
        return (para1 + para2);
}

int calc_dec(int para1, int para2) {
        return (para1 - para2);
}

int calc_mux(int para1, int para2)
{
        return(para1 * para2);
}

calc.h
#ifndef __CALC_H__
#define __CALC_H__

int calc_add(int para1, int para2);
int calc_dec(int para1, int para2);
int calc_mux(int para1, int para2);

#endif
  1. 编写Makefile文件并执行make命令,并运行程序
    2.1 Makefile文件
main:main.o calc.o input.o
        gcc -o main main.o calc.o input.o

main.o:main.c
        gcc -c main.c

calc.o:calc.c
        gcc -c calc.c

input.o:input.c
        gcc -c input.c

clean:
        rm *.o
        rm main

2.2 执行make命令

glen@ubuntu:~/calc$ ls
calc.c  calc.h  input.c  input.h  main.c  Makefile
glen@ubuntu:~/calc$ make
gcc -c main.c
gcc -c calc.c
gcc -c input.c
gcc -o main main.o calc.o input.o
glen@ubuntu:~/calc$ ./main
Please input a calcuate expression:4 * 1235678
4 * 1235678 = 4942712

这里可程序执行正常。

  1. 修改Makefile文件
    4.1 把所有目标文件*.o使用变量替代,执行编译
Makefile
objects:=main.o calc.o input.o
main:$(objects)
        gcc -o main $(objects)

main.o:main.c
        gcc -c main.c

calc.o:calc.c
        gcc -c calc.c

input.o:input.c
        gcc -c input.c

clean:
        rm *.o
        rm main

glen@ubuntu:~/calc$ make clean
rm *.o
rm main
glen@ubuntu:~/calc$ make
gcc -c main.c
gcc -c calc.c
gcc -c input.c
gcc -o main main.o calc.o input.o

以上编译成功

4.2 把所有目标文件*.o的依赖及生成文件使用%.o:%.c替代,并把编译指令改为"gcc -c $^ -o $@"

Makefile
objects:=main.o calc.o input.o
main:$(objects)
%.o : %.c
        gcc -c $^ -o $@

.PHONY clean:
        rm *.o
        rm main

glen@ubuntu:~/calc$ make
gcc -c main.c -o main.o
gcc -c calc.c -o calc.o
gcc -c input.c -o input.o
cc   main.o calc.o input.o   -o main

以上编译成功

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值