makefile,make,gcc/g++ 编译流程分析

发布时间:2024年01月18日

makefile,make,gcc/g++ 编译流程分析

C++实现加减乘除四个运算

//
// Created by qiufh on 2024-01-17.
//

#include "add.h"

int add(int a, int b) {

    return a + b;
}
//
// Created by qiufh on 2024-01-17.
//

#ifndef UNTITLED3_ADD_H
#define UNTITLED3_ADD_H

int add(int, int);


#endif //UNTITLED3_ADD_H
//
// Created by qiufh on 2024-01-17.
//

#include "calc.h"
#include "add.h"
#include "sub.h"
#include "multi.h"

int main() {
    int a = 1;
    int b = 2;
    printf("a+b=%d\n", add(a, b));
    printf("a+b=%d\n", sub(a, b));
    printf("a+b=%d\n", multi(a, b));
    return 0;
}
//
// Created by qiufh on 2024-01-17.
//

#ifndef UNTITLED3_CALC_H
#define UNTITLED3_CALC_H


class calc {

};


#endif //UNTITLED3_CALC_H
//
// Created by qiufh on 2024-01-17.
//

#include "multi.h"

int multi(int a, int b) {
    return a * b;
}
//
// Created by qiufh on 2024-01-17.
//

#ifndef UNTITLED3_MULTI_H
#define UNTITLED3_MULTI_H


int multi(int, int);

#endif //UNTITLED3_MULTI_H
//
// Created by qiufh on 2024-01-17.
//

#include "sub.h"

int sub(int a, int b) {
    return a - b;
}
//
// Created by qiufh on 2024-01-17.
//

#ifndef UNTITLED3_SUB_H
#define UNTITLED3_SUB_H


int sub(int a, int b);


#endif //UNTITLED3_SUB_H

使用makefile文件编译我们的源代码文件

在这里插入图片描述

生成可执行文件

在这里插入图片描述

执行一下这个可执行的文件

在这里插入图片描述

成功输出

修改下我们的makefile文件的写法,否则很多源文件的话我们要手写很多

在这里插入图片描述

make一下

在这里插入图片描述

执行一下

在这里插入图片描述

还是可以输出我们的calc里面的代码跟上面的一样

现在修改一下add.cpp里面的代码

在这里插入图片描述

保存退出

然后我们在make编译一下,我们发现我们只编译了修改了的add.cpp的文件,其他两个没修改的文件没被编译。

在这里插入图片描述

可以有效的缩短我们的编译时间。分开写的好处

#calc:
#       g++ add.cpp calc.cpp multi.cpp sub.cpp -o calc
#
#
#


calc:add sub multi
//-o 是输出文件
        gcc add.cpp sub.cpp multi.cpp calc.cpp -o calc

add:add.cpp
        gcc -shared add.cpp -o add

sub:sub.cpp
        gcc -shared sub.cpp -o sub

multi:multi.cpp
        gcc -shared multi.cpp -o multi

过程

源代码编译成可执行文件

预处理:gcc -E main.cpp>main.ii

在这里插入图片描述

查看一下main.ii的内容,这就是预处理

在这里插入图片描述

编译这个main.ii文件,编译产物是main.s的汇编文件,gcc-S main.ii 得到名为 main.s 的汇编文件

在这里插入图片描述

看一下里面的内容

在这里插入图片描述

在这里插入图片描述

汇编 gcc -c main.s 得到名为 main.o 的二进制文件

在这里插入图片描述

链接 gcc -lstdc++ main.o,g++ -lstdc++main.o 得到名为 a.out 的可执行文件

在这里插入图片描述

执行一下a.out

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_46039528/article/details/135662985
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。