(一)Ubuntu软件中参数设置及相关软件下载
1、在Ubuntu软件平台的终端中,编写文件默认使用的为vi工具,但是vi工具对于不熟悉该工具的新手会有诸多困难和问题(例如光标的移动需要键盘字母操控)。所以在此使用的是vim工具。在终端中输入如下命令,下载vim工具。命令:sudo apt-get install vim 。之后使用vi创建文件并编辑会自行跳转到vim工具进行操作。
2、设置vim编辑器(此步骤可省略):用vi打开文件/etc/vim/vimre。命令:sudo vi /etc/vim/vimrc,在此文件最后面输入代码:set ts=4和set nu用以显示行号。
(二)使用gcc编译“Hello World” C程序
1、编写主函数c程序
*编写hello.c
2、gcc编译器编译hello.c文件然后运行
gcc命令格式如下:
gcc 【选项】 【文件名字】
常用选项如下:
-o 预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。
-E 将test.c预处理输出test.i文件。
-S 将预处理输出文件test.i汇编成test.s文件。
-c 将汇编输出文件test.s编译输出test.o文件。
无选项链接 将编译输出文件test.o链接成最终可执行文件test。
-O 使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
*使用如下命令进行编译生成hello文件,并运行。
(三)使用gcc编译同一目录下不同文件
1、编写C程序(两数相除运算)
*编写main.c
*编写sub1.h
*编写sub1.c
2、gcc直接编译
*一命令:gcc -c sub1.c 将sub1.c程序转换为目标文件sub1.o
*二命令:gcc main.c sub1.o -o main 编译main.c文件为目标文件main.o,然后链接sub1.o目标文件生成main可执行文件。
*三命令:./main 执行生成的main文件,结果为12/4。并且文件中多了sub1.o和main的目标文件。
(四)windows平台下对应的相关程序
*工具:Visual Sudio C++
“程序代码及实现功能:与Ubuntu系统上的Linux系统程序基本一致
步骤如下:
1、编写C++程序
*编写main.cpp
*编写sub1.h
2、C++平台直接编译运行
3、两种编程及编译方式的对比
两种程序实现的功能相同,且编程代码也基本一致,但Ubuntu系统下需要多编写一项sub1.c的文件,而相比于一切操作命令在终端上运行的Ubuntu系统,windows平台上使用c++的编译操作会更加简洁,只需要两个文件在同一目录下即可一同一键编译,但是在Ubuntu系统下需要gcc的直接操作命令来转化成.o文件,在编译出想要的目标文件,更直观但是操作却略显繁琐。当同一目录下存在多个需要编译的文件时,修改其中的一项文件会导致gcc将所有文件重新编译,工程量大且耗时多。
(五)使用Makefile编译c程序
1、make工具及Makefile文件
当源代码文件过多时,使用gcc命令进行输入编译会导致重复性的工作产生,因为gcc命令的每次编译都需要将所有文件进行编译,而当只修改少数文件时,就会产生多余编译的操作,这时就需要使用make的自动化编译工具。
make软件用于将源代码编译成可执行的二进制文件,make工具主要用于完成自动化编译工作,包括修改几个源文件则重新编译这几个源文件、头文件被修改,则重新编译包含该头文件的所有源文件,make工具的编译则需要Makefile文件提供编译文件。
Makefile工具指明了make工具的编译规则,make工具就根据makefile中的命令进行编译和链接的。makefile命令中就包含了调用gcc去编译某个源文件的命令。
2、编写C程序
程序功能;从键盘上输入数字a和b,显示a乘b的结果
工程文件:包括main.c 、sub1.c 、sum.c 三个C文件和 sub1.h 、sum.h两个头文件,其中main.c为主体文件,sub1.c负责从键盘输入数值,sum.h负责进行两数相乘。
*编写 main.c
*编写sub1.c
*编写sum.c
*编写sub1.h
*编写sum.h
3、使用make和Makefile文件编译
*编写Makefile文件
*直接使用make命令,会执行编译功能,生成main文件
*运行结果展示:
*所有文件如下:
*删除编译产生的中间文件,在源文件目录下执行make clean命令即可删除编译过程中产生的*.o文件
(六)总结
通过这次在Ubuntu系统上编写C语言程序的实验,我学到了很多东西。通过与windows系统的对比,我发现两种程序实现的功能相同,且编程代码也基本一致,但Ubuntu系统下需要多编写一项sub1.c的文件,而相比于一切操作命令在终端上运行的Ubuntu系统,windows平台上使用c++的编译操作会更加简洁,只需要两个文件在同一目录下即可一同一键编译,但是在Ubuntu系统下需要gcc的直接操作命令来转化成.o文件,在编译出想要的目标文件,更直观但是操作却略显繁琐。
这次实验中我使用了两种方式编译C程序,一种为gcc直接编译,一种为make工具进行编译,两种方式分别适用不同的情况,在少量文件的情况下使用gcc直接编译,在多文件的情况下使用make工具进行编译,但两者的底层编译原理其实相同,都是一种将.c文件转换为.o的目标文件,再编译出程序。而make工具则是在此基础上添加了自动化编译的功能,更加智能减少了工作量。通过这种原始的编译方式,我更加直观感受到c文件编译为可执行文件的过程。让我更加熟悉了Ubuntu的相关命令和操作。