学习目的:
熟练掌握在Ubuntu常用指令并使用gcc和Makefile方式编译C程序学习任务:
1.在Ubuntu系统下编写简单C程序
2.学习主程序文件和子程序文件的编写
3.学习使用Makefile方式编程主程序
目录
一.在Ubuntu系统下用C语言编写一个简单的hello word程序并输出
4.在此实验基础上,在ubuntu系统下用Makefile方式编写主程序
一.在Ubuntu系统下用C语言编写一个简单的hello word程序并输出
1.新建HelloWorld.c文件
vim HelloWorld.c
(注:HelloWorld为文件名,.c为文件格式)
2.编写HelloWorld.c文件
#include <stdio.h>
int main(){
printf("Hello,World!\n");
return 0;
}
3.用gcc编译HelloWorld.c文件
gcc -o HelloWorld HelloWorld.c
4.输出HelloWorld
./HelloWorld
二.主程序文件main1.c和子程序文件sub1.c的编写
1.文件要求
子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。
1) 请在ubuntu系统用gcc 命令行方式编译主程序main1.c 并运行;
2) 请在windows系统下用你熟悉的编译工具编译主程序main1.c 并运行。
2.使用gcc命令方式编译
(1)编写main1.c和sub1.c文件
#include<stdio.h>
int main()
{
float x2x(int a,int b);
int x,y;
float z;
printf("enter x and y:\n");
scanf("%d %d",&x,&y);
z=x2x(x,y);
printf("x+y=%f\n",z);
return 0;
}
float x2x(int a,int b)
{
return (a+b);
}
(2)gcc编译
a.将main1.c文件和sub1.c文件同时编译
gcc main1.c sub1.c -o tets1
b.将main1.c和sub1.c分布编译
gcc -E main1.c -o main1.i
gcc -S main1.i -o main1.S
gcc -c main1.S -o main1.o
gcc -E sub1.c -o sub1.i
gcc -S sub1.i -o sub1.S
gcc -c sub1.S -o sub1.o
gcc main1.o sub1.o -o test
(3)输出.test文件
wangtiezhu@wangtiezhu-virtual-machine:~$ ./test
enter x and y::
3 8
x+y=11.000000
3.在Windows系统下使用dev编译
1).编写main1.c和sub1.c文件
2).输出结果
4.在此实验基础上,在ubuntu系统下用Makefile方式编写主程序
(1).新建makefile文件并编写
test:*c
gcc *.c -o test
(2).编译并输出
wangtiezhu@wangtiezhu-virtual-machine:~$ ./test
enter x and y::
44 55
x+y=99.000000
三.总结
1.gcc编译过程(以hello.c为例)
编译阶段 | 编译命令 | 作用 |
预处理 | gcc -E hello.c -o hello.i | 编译器将源代码中包含头文件编译进来 |
编译 | gcc -S hello.i -o hello.s | 检查代码规范性并翻译成汇编语言 |
汇编 | gcc -c hello.s -o hello.o | 将.s文件转换为目标文件 |
链接 | gcc hello.o -o hello | 将目标文件转换为可执行文件 |
2.关于gcc及makefile的认识
gcc有很明显的缺点,在文件量大,多文件不在同一目录下的情况几乎无法使用,此时就需要我们用makefile的方式来处理
makefile含有数量庞大的通配符和隐藏规则,灵活使用有利于编码更为统一高效。