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

文章目录

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

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,gcc/g++ 编译流程分析_第1张图片

生成可执行文件

makefile,make,gcc/g++ 编译流程分析_第2张图片

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

makefile,make,gcc/g++ 编译流程分析_第3张图片

成功输出

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

makefile,make,gcc/g++ 编译流程分析_第4张图片

make一下

makefile,make,gcc/g++ 编译流程分析_第5张图片

执行一下

makefile,make,gcc/g++ 编译流程分析_第6张图片

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

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

makefile,make,gcc/g++ 编译流程分析_第7张图片

保存退出

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

makefile,make,gcc/g++ 编译流程分析_第8张图片

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

#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

makefile,make,gcc/g++ 编译流程分析_第9张图片

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

makefile,make,gcc/g++ 编译流程分析_第10张图片

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

makefile,make,gcc/g++ 编译流程分析_第11张图片

看一下里面的内容

makefile,make,gcc/g++ 编译流程分析_第12张图片

makefile,make,gcc/g++ 编译流程分析_第13张图片

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

makefile,make,gcc/g++ 编译流程分析_第14张图片

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

makefile,make,gcc/g++ 编译流程分析_第15张图片

执行一下a.out

makefile,make,gcc/g++ 编译流程分析_第16张图片

你可能感兴趣的:(linux系统笔记,linux,android)