Linux环境下的C/C++编译
1.编写简单输出的程序(C++ 通过g++方式编译)
- 在文件夹中使用Nano创建hello.cpp文件
nano hello.cpp
- 编辑hello.cpp文件,代码如下
#include<iostream>
using namespace std;
int main(){
cout<<"hello world"<<endl;
return 0;
}
-
使用g++命令进行编译
- 执行过程
#预处理->编译->汇编->链接 1、预处理 g++ -E hello.cpp -o hello.i 2、编译,生成汇编代码 g++ -S hello.i -o hello.s 3、汇编,生成.o汇编文件 g++ -c hello.s -o hello.o 4、链接生成可执行文件 g++ hello.o -o hello
或者直接使用如下命令可直接生成可执行文件
g++ hello -o hello
2、简单的加法运算(C语言通过Makefile方式)
- 通过Nano创建main1.c和sumTest.c文件
- main1.cpp
//main1.c
#include <stdio.h>
int getSum(int ,int );
int main(){
int a;
int b;
printf("input 'a' and 'b'\n");
scanf("%d %d",&a,&b);
int sum = getSum(a,b);
printf("a+b=%d \n",sum);
return 0;
}
- sumTest.c
#include <stdio.h>
int getSum(int a , int b){
return a+b;
}
- 通过nano创建makefile文件
- 编写Makefile
#test文件依赖于main1.o和sumTest.o
test : main1.o sumTest.o
gcc -o test main1.o sumTest.o
#生成main1.o和sumTest.o文件
main1.o : main1.c
gcc -c main1.c
sumTest.o : sumTest.c
gcc -c sumTest.c
- 执行make命令
- 执行步骤
- make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
- 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“test”这个文件,并把这个文件作为最终的目标文件。
- 如果test文件不存在,或是test所依赖的后面的 .o 文件的文件修改时间要比test这个文件新,那么,他就会执行后面所定义的命令来生成test这个文件。
- 如果test所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。
- 于是make会生成 .o 文件,然后再用 .o 文件声明make的终极任务,也就是执行文件test。
总结
Makefile:
-
定义
makefile关系到了整个工程的编译规则。当一个工程中的源文件较多时,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
- 用法
target ... : prerequisites ...
command
...
target可以是一个object file(目标文件),也可以是一个执行文件,还可以是一个标签(label)。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的shell命令)