文章目录
- 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一下
执行一下
还是可以输出我们的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