一.熟悉基本的ubuntu编译指令

ctrl+art+t:打开ubuntu系统终端                        touch:创建当前目录下的文本文件
ls:打开当前目录下的文本文件                       cd :导航到相关目录(后面打目录名称)
gedit:打开文本编辑C语言                             rm -rf  :删除文本文件
mkdir:创建文本文件                                   
 //()表示填入相关文件名//                             
二.gcc编译的相关指令
gcc -c () -o():将代码文件编译成目标文件    gcc    -c() :将c语言程序转化为目标文件
gcc() -o () :将目标文件转化为可执行文件       //可看下列程序明白gcc编译//

三.gcc下的程序编译       

例子一 

 1.导航到bian目录,然后创建main1.c,之后打开编译器编译文本文件

2.生成目标文件,之后生成可执行文件,最后执行文件

3.期间用ls查询目录下的文件

shu@shu-virtual-machine:~/桌面/bian$ touch main1.c
shu@shu-virtual-machine:~/桌面/bian$ gedit main1.c
shu@shu-virtual-machine:~/桌面/bian$ gcc -c main1.c
shu@shu-virtual-machine:~/桌面/bian$ gcc main1.o -o all
shu@shu-virtual-machine:~/桌面/bian$ ./all
hello world
shu@shu-virtual-machine:~/桌面/bian$

  这是在Windows,c语言编译器下编译的代码运行结果,与上面做对比 

hello world
Press any key to continue

例子二

用gcc编译主程序,将子程序文件写入主程序中,编译运行

主程序main.c                                                                                                     

#include<stdio.h>
#include"1.h"
void main()
{float z=x2x(4,2);
printf("%f\n",z);
}

子程序1.h

#ifndef  _1_H_
#define  _1_H_
#include<stdio.h>
float x2x(int x,int y)
{float n=(float)x/y;
return n;
}
#endif

先用上面的liunx命令在Ubuntu终端上创建相关文件 ,在用相关命令对main.c进行产生目标文件,可执行文件,最后执行文件即可

shu@shu-virtual-machine:~/桌面/bian$ gcc -c main.c
shu@shu-virtual-machine:~/桌面/bian$ ls
1.h  all  main1.c  main1.o  main.c  main.o
shu@shu-virtual-machine:~/桌面/bian$ gcc main.o -o all7
shu@shu-virtual-machine:~/桌面/bian$ ls
1.h  all  all7  main1.c  main1.o  main.c  main.o
shu@shu-virtual-machine:~/桌面/bian$ ./all7
2.000000

 对目录进行查询,找到相关文件,不断查询是否创建成功,最后生成可执行文件all7,最后对其执行即可。

 四.编译中对指令进行验证的过程(对不是源程序的文本验证)

gcc  -c 1.h -o 1.o        gcc -c 1.h

shu@shu-virtual-machine:~/桌面/bian$ gcc -c 1.h -o 1.o
shu@shu-virtual-machine:~/桌面/bian$ ls
1.h  1.o  all  all7  main1.c  main1.o  main.c  main.o
shu@shu-virtual-machine:~/桌面/bian$ gcc -c 1.h
shu@shu-virtual-machine:~/桌面/bian$ ls
1.h  1.h.gch  1.o  all  all7  main1.c  main1.o  main.c  main.o
shu@shu-virtual-machine:~/桌面/bian$

前者系统会产生目标文件,后者会形成1.h.gch,当只需要目标文件时用前者,要系统生成文件时用后者。

 五.总结

shu@shu-virtual-machine:~/桌面/bian$ gcc main1.c -o a1
shu@shu-virtual-machine:~/桌面/bian$ ./a1
hello world
shu@shu-virtual-machine:~/桌面/bian$ gedit main1.c
shu@shu-virtual-machine:~/桌面/bian$ ./a1
hello world
shu@shu-virtual-machine:~/桌面/bian$ gcc -c main1.c
shu@shu-virtual-machine:~/桌面/bian$ gcc main1.c -o a1
shu@shu-virtual-machine:~/桌面/bian$ ./a1
hello worldshu@shu-virtual-machine:~/桌面/bian$

 ubuntu编译形成的可执行文件不会因为改变源代码而改变文件产生的结果,当源代码改变时只有再次生成可执行行文件,才会产生不一样的结果。

注释:写的是一个文件引用子程序部分,所以只需要对源程序进行产生目标文件,可执行文件。下文makefile编译用两个源程序,他们之间用定义程序文件连接,所以要对两个源程序进行产生目标文件和可执行文件。

 六. 用makefile编译c程序

 编写两个源文件,通过一个子文件连接.

//main.c//
#include<stdio.h>
#include"1.h"
void main()
{
float z=x2x(4,2);
printf("%f\n",z);
}
//1.c//
#include<stdio.h>
#include"1.h"
float x2x(int x,int y)
{
float n=(float)x/y;
return n;
}
//1.h//
#ifndef  _1_H_
#define  _1_H_
#include<stdio.h>
float x2x(int x,int y);
#endif

编写一个makefile文件

all: 1.o main.o	
	gcc main.o 1.o -o all
1.o: 1.c
	gcc -c 1.c -o 1.o
main.o: main.c
	gcc -c main.c -o main.o
clean:    
    rm *.o

通过mkdir创建一个目录,在同一个目录下创建四个文本文件,最后在终端模式下执行make命令,最后就会生成可执行文件all,通过./all计算出结果

shu@shu-virtual-machine:~/桌面/b$ make
shu@shu-virtual-machine:~/桌面/b$ ls
1.c  1.h  1.o  main.c  main.o  makefile all
shu@shu-virtual-machine:~/桌面/b$ make clean
rm *.o
shu@shu-virtual-machine:~/桌面/b$ ls
1.c  1.h  main.c  makefile

七.总结

makefile编程时改动子程序或者源程序时候, 产生的相应文件的结果也会随之改变,不需要再次建立目标文件和可执行文件。

makefile文件编译规则

all: 1.o main.o	
	gcc -c main.o 1.o -o all
1.o: 1.c
	gcc -c 1.c -o 1.o
main.o: main.c
	gcc -c main.c -o main.o
clean:
	rm *.o

目标文件:合成文件

(tab键) 合成的文件的代码

目标文件:合成文件

(tab键) 合成的文件的代码

目标文件:合成文件

(tab键) 合成的文件的代码