ubuntu系统下的gcc,makefile编译c程序

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值