本文主要叙述Ubuntu18.04系统下编译C程序的基本流程,包括环境的配置,最基础的网络参数设置、apt源的更换、经典hello world在Ubuntu下的编译方式,vim文本编辑器的利用,makefile的使用等。
一、环境配置
虚拟机软件 VMware Workstation Pro
Ubuntu 18.04
这里需要注意一下,虚拟机软件 VMware Workstation Pro装好之后,我们的网络连接处会出现两张虚拟网卡
如果没有,可能是因为你以前卸载过此软件,有些文件没有卸载干净,或者注册表里面有一些部分出现了问题,详细的解决方法可参考此链接VMware安装完后,没有虚拟网卡 - psy_code - 博客园
二、网络参数设置
Ubuntu的网络配置有两种方式,一种是通过interfaces来设置(较复杂),一种是通过NetworkManager来配置,这里主要讲解NetworkManager配置方式。
通过NetworkManager配置网络
NetworkManager是Ubuntu中图形化的网络管理工具。
网络命令管理行工具NetworkManager command line tool,也叫nmcl
1.设置虚拟机的网络适配器为桥接模式或NAT模式
选择 虚拟机 --> 设置 --> 网络适配器 -->桥接模式(或-->NAT模式)
注意选择桥接模式时同时勾选上复制物理网络连接状态
2.虚拟网络编辑器设置
选择 编辑-->虚拟网络编辑器
点击更改设置
这里选择添加网络,添加VMnet0,设置为桥接模式,并设置为自动即可(也可直接选择NAT模式)
3.检查网络配置
在命令窗口输入ifconfig -a
查看自己的网卡编号
在命令行输入 ping 自己的IP地址
,或ping www.baidu.com
可以看是否可以ping通,在网络畅通的情况下,会一直返回数据条,停止输出则用crtl+c
;
三、更换apt源为阿里源
输入命令 sudo vim /etc/apt/sources.list 编辑源文件列表
将原有的内容改为如下内容。
运行如下命令 sudo apt-get update
更新软件列表
四、编写一个简单的输出hello world的C程序
1.安装vim,gcc
输入命令sudo apt-get install vim
安装vim编辑器sudo apt-get install gcc
安装gcc编译器
2.vim的简单介绍及使用
Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富, 在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。
vim有三种模式:命令模式、插入模式以及末行模式。
常用指令:
i 切换到输入模式,以输入字符
: 切换到底线命令模式,在最后一行输入命令
x 删除当前光标所在字符
esc 退出输入模式,切换到命令模式
w 保存当前以写入的内容
q 退出vim的编辑
wq 保存后退出vim的编辑
wq! 强制保存后退出vim的编辑
3.新建 hello.c
输入命令 vim hello.c
进入编辑器后,按下i,进入编辑模式,编写如下代码
#include<stdio.h>
main()
{
printf("hello world!");
return 0;
}
编辑完成后,esc键,wq!退出vim编辑
4.编译hello.c
输入命令gcc hello.c -o hello
此时会生成一个hello文件
输入./hello
即完成hello world的经典编译
五、对两个输入整型参数做某个运算
1.要求
子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。
2.在虚拟机下编写c语言代码
输入命令 vim main1.c 编辑如下代码
#include<stdio.h>
extern float x2x(int x,int y);
int main()
{
int x,y;
x=3;
y=6;
float ans;
ans=x2x(x,y);
printf("%f",ans);
return 0;
}
编译完成,wq! 强制保存后退出编辑
输入命令 vim sub1.c 编辑如下代码
float x2x(int x,int y)
{
float ans;
ans=x+y;
return ans;
}
编译完成,wq! 强制保存后退出编辑
之后输入命令运行gcc -o main main1.c sub1.c
./main1
3.在windows上编写c语言代码
这里我才用的DEV C++进行编译
编写 main.c 文件
#include"sub1.h"
int main()
{
int x,y;
x=3;
y=6;
float ans;
ans=x2x(x,y);
printf("%f",ans);
return 0;
}
编写 sub1.h 文件
#ifndef __SUB1_H
#define __SUB1_H
#include<stdio.h>
float x2x(int x,int y);
#endif
编写 sub1.c 文件
#include"sub1.h"
float x2x(int x,int y)
{
float ans;
ans=x+y;
return ans;
}
之后对 main.c 文件进行编译
六、采用makefile对上述程序进行编译
1.makefile简介
在Shell脚本中使用make命令来进行编译,尤其在C/C++开发中,make命令通过makefile文件中描述源程序之间的依赖关系进行自动编译;makefile文件是按照规定格式编写,需说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系;很多大型项目的编译都是通过 Makefile 来组织的。
2.make如何工作
1.make在当前目录下寻找“Makefile”或“makefile”文件
2.若找到,查找文件中的第一个目标文件.o
3.若目标文件不存在,根据依赖关系查找.s文件
4.若.s文件不存在,根据依赖关系查找.i文件
5.若.i文件不存在,根据依赖关系查找.c文件,此时.c文件一定存在,于是生成一个.o文件,再去执行
3.makefile文件
Makefile文件由一系列规则rules构成,每条规则形式如下:
<target>: <prerequisites>
[Tab]<commands>
第一行冒号前为目标,冒号后为前置条件;第二行必须由一个Tab键起首,后接命令;目标是必须的,不可省略;前置条件和命令是可选的,但两者必须至少存在一个。
4.目标Target
目标可以是文件名,指明make命令所要构建的对象;也可以是某个操作名称,称“伪目标”;
clean:
rm *.o
以上代码目标是clean,命令是rm *.o;
执行make clean命令,实现对象文件的删除;
5.安装make
输入命令 sudo apt-get install make
6.用vim编写makefile
输入命令 vim makefile 编写如下代码
prog: main1.o sub1.o
cc main1.o sub1.o -o prog
main1.o: main1.c
cc -c main1.c
sub1.o: sub1.c
cc -c sub1.c
clean:
rm prog *.o
wq! 保存退出后,在命令行先输入 make ,再输入 ./prog 即可