目录
二.在Ubuntu上编写一个简单的hello world程序
三.进阶练习—通过子程序对两个输入的整型变量进行运算(对比Linux与Ubuntu)
一.环境设置
VMware虚拟机软件安装
Ubuntu 18.04 虚拟机配置
二.在Ubuntu上编写一个简单的hello world程序
1.安装vim文本编辑器和gcc编译器
sudo apt-get vim
sudo apt-get gcc
2.新建hello.c 编辑后保存
输入touch hello.c 创建hello.c源文件,此时键入ls -l即可查看文件列表
输入vim/vi hello.c 进入文本编辑器,键入i进入insert输入模式即可编写代码
#include<stdio.h>
int main()
{
printf("hello world!/n");
return 0;
}
代码编写完成后,键入Esc后按住Ctrl+" : "进入到命令模式,然后输入wq!即可保存代码并退出。
3.编译允许hello.c
在终端中用gcc编译软件进行编译,输入gcc -o hello hello.c(-o后面就是编译后的名字)
此时通过 ls -l 即可看到文件列表多了一个hello的可执行文件
输入./hello 便可执行经典的helloworld程序啦(操作及结果ru'xi)
通过以上的经典hello.c的练习,我们也算是基本熟悉了Linux的命令行系统环境以及清楚了如何在linux环境下编写执行一个c语言程序的基本流程
三.进阶练习—通过子程序对两个输入的整型变量进行运算(对比Linux与Ubuntu)
1.代码段
·主程序
#include <stdio.h>
#include <stdlib.h>
#include "sub1.h" //main函数源文件
int main()
{
int num1,num2;
float output;
printf("Please input two numbers:\n");
scanf("%d,%d",&num1,&num2);
output = add(num1,num2);
printf("The calculation results: %.2f\n",output);
system("pause"); //起到暂停作用,为了方便在vscode编译窗口看到结果
return 0;
}
·子程序
#ifndef _SUB1_H_ //子程序头文件
#define _SUB1_H_
float add(int x,int y);
#endif
#include <stdio.h> //子程序源文件
#include "sub1.h"
float add(int x,int y)
{
float sum;
sum = x + y;
return sum;
}
2.Linux操作系统环境下编译操作及结果
·编辑编译工具:vim、gcc
· 补充GCC的用法
通过gcc的"-o"命令选项来指定自己的可执行程序的名称
eg:gcc -o name name.c 即可生成可执行文件name
通过gcc的"-c"标记来编译支持库代码(对多个文件进行编译)
eg:gcc -c name.c 输出一名为name.o的文件
· Step1
通过vim创建main.c和sub1.c两个源文件,并创建sub1.h的头文件(代码为上文代码段中代码)
· Step2
首先通过gcc -c sub1.c和gcc -c main.c将他们转变为sub1.o和main.o(他们包含能够被Linux执行的目标代码),然后通过gcc -o Finalmain main.o sub1.o来执行连接阶段的工作,最终生成一个可执行文件Finalmain
· Step3
最后通过 ./Finalmain 执行编译好的文件,执行结果如下
3.Windows环境下
· 编译器工具:visual studio code
· 与Linux上面代码段不同的是,我在main.c里面包含了sub1的头文件和源文件两个,因为一开始只包含sub1头文件时编译报错,可能因为在编译main.c的时候没有同时编译sub1.c,导致在main里面调用sub1里面的函数时存在问题,于是我将sub1.c直接包含在了main.里面便可成功执行了
编译结果如下:
四.Linux系统中Makefile文件编写
1.Makefile的基本使用规则
在使用makefile之前,我们先来看一下makefile的基本规则如下:
target : prerequisites
command
target 是一个目标文件,也可以是.o gcc编译后的文件,还可以是一个标签
prerequisites 就是要生成的target所需要的文件或是目标
command 也就是 make 需要执行的命令(任意的 Shell 命令)
它们之间就是一个文件依赖的关系,即target这一个或多个的目标文件依赖于prerequisites中的文件,若prerequisites中的文件比target中的文件更新的话,那么就会执行command命令,这就是makefile的规则,也是makefile的核心。
2.运用makefile编译链接上文代码程序并执行
通过vim makefile 创建makefile文件,其中代码段如下:
代码编译允许结果如下:
五.结论
通过对比Windows环境下的编译器编译代码和Linux环境下的gcc及makefile编译代码过程,更加清楚我们编写的源码首先是通过编译器生成中间代码文件(.obj/.o),然后再将大量obj链接起来生成的可执行行文件,这些工作再WIndows环境下都是编译器直接帮我们做好滴,现在才大致体会到了这个过程,不得不说Linux环境下makefile还真挺用的。