一. 任务要求
请编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。
1) 请在ubuntu系统用gcc 命令行方式编译主程序main1.c 并运行;
2) 请在windows系统下用你熟悉的编译工具编译主程序main1.c 并运行。
3) 在任务4基础上,在ubuntu系统下用Makefile方式编程主程序。
二. 解决任务
(一)在ubuntu系统下用gcc命令行的方式编译主程序并运行
1.编写c程序
1.1编写main1.c
1.2编写sub1.h
1.3编写sub1.c
2.调试运行
2.1将sub1.c程序转换为目标文件sub1.o
命令: gcc -c sub1.c
2.2编译main1.c文件为目标文件main1.o,然后链接sub1.o目标文件生成main1可执行文件
命令:gcc main1.c sub1.o -o main1
2.3执行./main1
命令,即可执行编译生成的main1程序
3.注意:gcc编译过程分为四个阶段,包括预处理、编译、汇编、链接。
( 二).在windows系统下编译主程序并运行
1.编译工具:DEV-c++
2.程序:与ubuntu上一致
2.1 main1.c
2.2 sub1.h
2.3 sub1.c
2.4 运行结果:
(三).在ubuntu系统中用Makefile方式编程主程序。
1.Makefile文件编写规则
target:prerequisites
command # command以一个tab键开始# target为一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)
# prerequisites是需要生成target所依赖的文件或是目标
# command也就是make需要执行的命令。(任意的Shell命令)
2.Makefile 作用
make 的执行过程,make 工具就是在 Makefile 中一层一层的查找依赖关系,并执行
相应的命令。编译出最终的可执行文件。
Makefile 的好处就是“自动化编译”,一旦写好了 Makefile文件,以后只需要一个 make 命令即可完成整个工程的编译,极大的提高了开发效率。
3.编写Makefile文件
4.使用Makefile编译c程序
在源文件目录下执行make命令,可得到执行文件main1
注: Makefile在编写时不能使用空格只能用TAB键,否则会报错。
三. 总结
通过本次实验,我学会了安装并且使用ubuntu、使用gcc直接编译和Makefile编译生成执行文件来运行c程序。
在gcc中,我了解到了gcc编译器的编译流程是:预处理、编译、汇编和链接。预处理就是展开所有的头文件、替换程序中的宏、解析条件编译并添加到文件中。编译是将经过预编译处理的代码编译成汇编代码,也就是我们常说的程序编译。汇编就是将汇编语言文件编译成二进制目标文件。链接就是将汇编出来的多个二进制目标文件链接在一起,形成最终的可执行文件,链接的时候还会涉及到静态库和动态库等问题。
在Makefil中make 命令会在当前目录下查Makefile(makefile 其实也可以)命名的文件。当找到 Makefile 文件以后就会按照 Makefile 中定义的规则去编译生成最终的目标文件。当发现目标文件不存在,或者目标所依赖的文件比目标文件新(也就是最后修改时间比
目标文件晚)的话就会执行后面的命令来更新目标。
参考文章:Ubuntu系统使用gcc和Makefile编译C程序_ubuntu使用 make编译链接多个c语言代码,变量法_不#曾&轻听的博客-CSDN博客