一.熟悉基本的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键) 合成的文件的代码